Java日期格式转换

现在项目中服务端返回的日期都需要转换成不同的显示风格,这里就写个日期转换工具类。具体代码如下:



import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

public class DateHelper {

    /**
     * 将时间字符串解析为 Date 类型,支持 ISO6801 格式
     *
     * @param s 时间字符串
     * @return 日期时间,如解析失败则返回 1970-01-01 00:00:00 东八区时间
     */

    public static Date fromString(String s) {
        if (StringUtils.isEmpty(s))
            return null;
        final String[] patterns = new String[]{
                "yyyy-MM-dd'T'HH:mm:ss.SSSZ",
                "yyyy-MM-dd'T'HH:mm:ssZ",
                "yyyy-MM-dd'T'HH:mm:ss.SSS",
                "yyyy-MM-dd'T'HH:mm:ss",
        };
        try {
            // 将 UTC 格式的时间转换为 GMT 时区
            s = StringUtils.removeEnd(s, "Z").concat("+00:00");

            return DateUtils.parseDate(s, patterns);
        } catch (ParseException e) {
            // 处理带有微秒和不带微秒的 UTC 格式日期时间
            SimpleDateFormat format;
            if (s.contains(".")){
                 format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.getDefault());
            }else {
                 format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.getDefault());
            }
            format.setTimeZone(TimeZone.getTimeZone("UTC"));
            try {
                return format.parse(s.replace("(?<=\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3})\\d{4}Z", ""));
            } catch (ParseException ex) {
                ex.printStackTrace();
            }
        }
        return null;
    }

    /**
     *  默认的日期时间格式
     */
    public static final String DEFAULT_DATETIME_FORMAT = "yyyy-MM-dd HH:mm";

    /**
     * 默认的日期格式
     */
    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";

    /**
     * 按照默认格式显示日期
     *
     * @param date 日期
     * @return 日期字符串
     */
    public static String formatByDefault(Date date) {
        if (date == null) return null;

        SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATETIME_FORMAT, Locale.getDefault());
        return format.format(date);
    }

    /**
     * 只显示年月日
     * @param date 日期
     * @return
     */
    public static String formatByDate(Date date){
        if (date == null) return null;

        SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATE_FORMAT, Locale.getDefault());
        return format.format(date);
    }
    /**
     * 获取便于阅读的日期文本,根据日期显示「昨天」、「今天」、「明天」和其他日期
     *
     * @param date 日期对象
     * @return 日期文本
     */
    public static String getHumanDateString(Date date) {
        if(date == null) return null;

        String result;
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        Calendar now = Calendar.getInstance();
        Calendar yesterday = Calendar.getInstance();
        yesterday.add(Calendar.DATE, -1);
        Calendar tomorrow = Calendar.getInstance();
        tomorrow.add(Calendar.DATE, 1);
//        if(DateUtils.truncatedCompareTo(calendar, now, Calendar.DAY_OF_MONTH) == 0) {
//            result = "今天";
//        } else if(DateUtils.truncatedCompareTo(calendar, yesterday, Calendar.DAY_OF_MONTH) == 0) {
//            result = "昨天";
//        } else if(DateUtils.truncatedCompareTo(calendar, tomorrow, Calendar.DAY_OF_MONTH) == 0) {
//            result = "明天";
//        } else {
            SimpleDateFormat format = new SimpleDateFormat(DEFAULT_DATE_FORMAT, Locale.getDefault());
            result = format.format(date);
//        }
        return result;
    }
}

这里需要用lang3这个库,要在build添加该库:


dependencies {

    ......

    compile 'org.apache.commons:commons-lang3:3.4'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值