时间格式转换类

Posted 夏末、初秋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了时间格式转换类相关的知识,希望对你有一定的参考价值。

时间格式转换类

/**
 * Copyright:信息科技有限公司 版权所有 违者必究 2013
 */

import org.apache.commons.lang3.StringUtils;
import org.springframework.util.Assert;

import java.text.DateFormat;
import java.text.MessageFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 时间日期的工具类
 *
 * @author : chenxh([email protected])
 * @date: 13-7-1
 */
public class DateUtil {

    public static final String DATETIME_FORMAT = "yyyyMMddHHmmss";
    public static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat(DATETIME_FORMAT);
    public static final String DATE_FORMAT = "yyyyMMdd";
    public static final String SHOW_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String SHOW_DATE_FORMAT = "yyyy-MM-dd";

    /**
     * 获取当前时间串,格式为:yyyymmddHHMiSS
     *
     * @return
     */
    public static final String getCurrDatetime() {
        return format(new Date(), DATETIME_FORMAT);
    }

    /**
     * 获取当前日期串,格式为yyyymmdd
     *
     * @return
     */
    public static final String getCurrDate() {
        return format(new Date(), DATE_FORMAT);
    }

    /**
     * @param date      时间
     * @param formatStr 格式化串
     * @return
     */
    public static String format(Date date, String formatStr) {
        if(date != null){

            SimpleDateFormat sdf = new SimpleDateFormat(formatStr);
            return sdf.format(date);
        }else{
            return "";
        }
    }

    /**
     * 对{@code date}字符串,采用<code>0</code>右补齐到{@code length}的长度
     *
     * @param date
     * @param length
     * @return
     */
    public static String pad0(String date, int length) {
        return padChar(date, length, ‘0‘);
    }

    /**
     * 对{@code date}字符串,采用<code>9</code>右补齐到{@code length}的长度
     *
     * @param date
     * @param length
     * @return
     */
    public static String pad9(String date, int length) {
        return padChar(date, length, ‘9‘);
    }

    private static String padChar(String date, int length, char theChar) {
        if (StringUtils.isEmpty(date)) {
            date = "";
        }
        return StringUtils.rightPad(date, length, theChar);
    }

    /**
     * {@code time1}是否小于{@code time2},即类似于<pre>time1 < time2</pre>。 如果{@code time2}为<code>null</code>,
     * 则视为最小。
     *
     * @param time1 时间字符串,格式为 yyyyMMddHHmmss,不足14位后补0
     * @param time2 时间字符串,格式为 yyyyMMddHHmmss,不足14位后补0
     * @return
     */
    public static boolean lessThan(String time1, String time2) {
        if (StringUtils.isEmpty(time1)) {
            if (StringUtils.isEmpty(time2)) {
                return false;
            } else {
                return true;
            }
        } else {
            return time1.compareTo(time2) < 0;
        }
    }


    /**
     * {@code time1}是否大于{@code time2},即类似于<pre>time1 > time2</pre>。如果{@code time2}为<code>null</code>,
     * 则视为最大。
     *
     * @param time1 时间字符串,格式为 yyyyMMddHHmmss,不足14位后补9
     * @param time2 时间字符串,格式为 yyyyMMddHHmmss,不足14位后补9
     * @return
     */
    public static boolean greaterThan(String time1, String time2) {
        if (StringUtils.isEmpty(time1)) {
            if (StringUtils.isEmpty(time2)) {
                return false;
            } else {
                return true;
            }
        } else {
            return time1.compareTo(time2) > 0;
        }
    }

    /**
     * 将<code>datetime</code>字符串时间转换为毫秒数
     *
     * @param datetime 长度必须大于等于8而小于等于14,格式为 yyyyMMddHHmmss,不足14位后补0
     * @return
     */
    public static long toMilliseconds(String datetime) {
        return parseDate(datetime).getTime();
    }

    /**
     * 将格式为{@link #DATETIME_FORMAT}的时间格式解析为Date对象,{@code datetime}的长度必须大于8小于14.
     *
     * @param datetime
     * @return
     */
    public static Date parseDate(String datetime) {
        Assert.notNull(datetime);
        Assert.isTrue(datetime.length() >= 4 && datetime.length() <= 14, "长度必须在4~14之间");
        DateFormat dateFormat = new SimpleDateFormat(DATETIME_FORMAT);
        try {
            if (datetime.length() < 14) {
                dateFormat = new SimpleDateFormat(DATETIME_FORMAT.substring(0, datetime.length()));
            }
            return dateFormat.parse(datetime);
        } catch (ParseException e) {
            throw new IllegalArgumentException("入参datetime:" + datetime + "解析异常,请检查格式必须为:"
                    + DATETIME_FORMAT.substring(0, datetime.length()));
        }
    }

    /**
     * 将字符串时间解析为对象
     *
     * @param datetime
     * @param format
     * @return
     */
    public static Date parseDate(String datetime, String format) {
        Assert.notNull(datetime);
        Assert.notNull(format);
        Assert.isTrue(datetime.length() == format.length(), "值和格式串的长度不一致");
        DateFormat dateFormat = new SimpleDateFormat(format);
        try {
            return dateFormat.parse(datetime);
        } catch (ParseException e) {
            throw new IllegalArgumentException(
                    MessageFormat.format("入参datetime:{1}解析异常,请检查格式必须为:{2}", datetime, format));
        }
    }
}

 

以上是关于时间格式转换类的主要内容,如果未能解决你的问题,请参考以下文章

Android:扩展和转换片段问题

在代码片段中包含类型转换

在创建VSCode片段时,如何将变量转换为title-case(如TitleCase)?

如何在 Javadoc 中使用 @ 和 符号格式化代码片段?

Android:片段无法转换为上下文[重复]

片段不能转换为 android.app.activity