package com.dxhy.sign.util;

import java.text.SimpleDateFormat;
import java.util.*;

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import com.google.common.base.Strings;

/**
 * Created by IntelliJ IDEA. User: Marvin
 *
 * @author peipei.li * @date 2019-05-09
 */
public final class DateTimeHelper {

    private DateTimeHelper() {}

    /**
     * 把指定格式(format)的字符串转换为时间
     *
     * @param dt
     *            指定格式的字符串
     * @param format
     *            指定格式(format)的字符串
     * @return 转换的时间格式。如果为空字符，则返回null
     */
    public static Date parseDateTime(final String dt, final String format) {
        DateTimeFormatter formatter = DateTimeFormat.forPattern(format);
        return Strings.isNullOrEmpty(dt) ? null : formatter.parseDateTime(dt).toDate();
    }

    /**
     * 根据格式化格式获取当前时间
     *
     * @param pattern
     *            请求参数
     * @return 返回结果
     */
    public static String formatNowDate(String pattern) {
        DateTimeFormatter formatter = DateTimeFormat.forPattern(pattern);
        return DateTime.now().toString(formatter);
    }

    /**
     * 某一个月第一天和最后一天
     *
     * @param date
     *            请求参数
     * @return 返回结果
     */
    public static Map<String, String> getFirstAndLastDayMonth(Date date) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, 0);
        Date theDate = calendar.getTime();

        // 上个月第一天
        GregorianCalendar gcLast = (GregorianCalendar)Calendar.getInstance();
        gcLast.setTime(theDate);
        gcLast.set(Calendar.DAY_OF_MONTH, 1);
        String dayFirst = df.format(gcLast.getTime());

        // 上个月最后一天
        // 加一个月
        calendar.add(Calendar.MONTH, 1);
        // 设置为该月第一天
        calendar.set(Calendar.DATE, 1);
        // 再减一天即为上个月最后一天
        calendar.add(Calendar.DATE, -1);
        String dayLast = df.format(calendar.getTime());

        Map<String, String> map = new HashMap<>(2);
        map.put("first", dayFirst);
        map.put("last", dayLast);
        return map;
    }

}
