文档章节

日期类相关转换

BWaylon
 BWaylon
发布于 2017/07/27 18:28
字数 410
阅读 8
收藏 1

    在日常项目中经常会碰到日期与字符串之间的相互转换,有很多工具包都提供了相关的功能,如commons-lang3.jar,该包中提供了DateUtils、DateFormatUtils2个类来实现,是线程安全的,还有org.joda.time等架包。在Java8当中又新增了一个包java.time,其中包含了LocalDate、LocalTime、LocalDateTime分别应用于不同的场景,并且都是线程安全的,该包中提供了很多非常实用的方法,比如:plusDays()、plusMonths()等,有了这些方法之后我们就无需考虑跨年跨月的问题了。

    可以在这些工具包的基础上再提供一个工具类,用来处理各种类型之间的转换:

package date;

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

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

/**
 * java.util.Date、String、java.time.LocalDate之间的相互转换(日期,不考虑时分秒)
 */
public class ConvertUtil {
    
    private static final String NORMAL_DATE_PATTERN = "yyyy-MM-dd";

    /**
     * String --> Date
     */
    public static Date stringToDate(String dateStr) throws Exception{
        return DateUtils.parseDate(dateStr, NORMAL_DATE_PATTERN);
    }
    /**
     * Date --> String
     */
    public static String dateToString(Date date){
        return DateFormatUtils.format(date, NORMAL_DATE_PATTERN);
    }
    
    /**
     * String --> LocalDate
     */
    public static LocalDate stringToLocalDate(String dateStr){
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern(NORMAL_DATE_PATTERN);
        return LocalDate.parse(dateStr, dtf);
    }
    /**
     * LocalDate --> String
     */
    public static String localDateToString(LocalDate localDate){
        return localDate.toString(); //默认格式为yyyy-MM-dd
    }
    
    /**
     * Date --> LocalDate
     * 方法一、Date类型不能直接转换成LocalDate,只能转换成LocalDateTime,再转成LocalDate,中间利用Instant类
     * 方法二、Date先转成String,再由String转成LocalDate(利用parse方法)
     */
    public static LocalDate dateToLocalDate(Date date){
        Instant instant = date.toInstant();
        ZoneId zone = ZoneId.systemDefault();
        return LocalDateTime.ofInstant(instant, zone).toLocalDate();
    }
    /**
     * LocalDate --> Date
     * 转换方法同上类似
     */
    public static Date localDateToDate(LocalDate localDate){
        ZoneId zone = ZoneId.systemDefault();
        Instant instant = localDate.atStartOfDay(zone).toInstant();
        return Date.from(instant);
    }
    
    
    public static void main(String[] args) {
        System.out.println(ConvertUtil.dateToLocalDate(new Date()).toString());
        
        LocalDate localDate = LocalDate.now();
        System.out.println(ConvertUtil.localDateToDate(localDate));
    }
    
}

 

© 著作权归作者所有

BWaylon
粉丝 0
博文 6
码字总数 1758
作品 0
高级程序员
私信 提问
Java 8 之 java.time 包

包概述 java.time 包是在JDK8新引入的,提供了用于日期、时间、实例和周期的主要API。 java.time包定义的类表示了日期-时间概念的规则,包括instants, durations, dates, times, time-zones...

GreenDay
2014/04/09
179
0
Java 中日期的几种常见操作 —— 取值、转换、加减、比较

java 的开发过程中免不了与 Date 类型纠缠,准备总结一下项目经常使用的日期相关操作,JDK 版本 1.7,如果能够帮助大家节约那么几分钟起身活动一下,去泡杯咖啡,便是极好的,嘿嘿。当然,我...

十一11
2016/02/20
86
0
Android技能树 — 时间相关总体小结

Android基础知识 Android技能树 — Fragment总体小结 Android技能树 — 动画小结 Android技能树 — View小结 Android技能树 — Activity小结 Android技能树 — View事件体系小结 Android技能...

青蛙要fly
09/07
0
0
Apache commons类库阅读笔记

commons-io --------Start--------- FilenameUtils 文件名称一些操作,如判断文件扩展名称等 FileUtils 文件工具类 IOUtils 主要提供了IO常见操作 Stream 转换,关闭Stream等操作 FileUtils文...

lis1314
2016/05/10
200
0
iOS开发之常用的那些工具类和方法

LBUtils: iOS开发常用工具类 NSDateUtil.h ----日期相关的工具类 功能: 指定日期格式的转换 NSFileUtil.h ----文件目录相关的工具类 功能: 获取Documents的路径 获取Cache的路径 判断文件是...

小芒果他爹
2016/04/12
221
0

没有更多内容

加载失败,请刷新页面

加载更多

华为手机翻译功能怎么使用?这三种方法请务必收藏

华为手机翻译功能怎么使用?在我们的生活中会经常遇到翻译问题,许多外语不好的朋友该怎么办呢?华为手机已经为我们解决了这个问题,今天小编就教大家学会使用华为手机中的三种翻译技巧,需要...

翻译小天才
34分钟前
4
0
企业服务软件开发中需要注意的三个问题

在开发企业服务软件时,我们需要分为:业务需求、用户需求、产品需求,三大需求层次,三个层次互相关联,企业服务软件开发首先要服务业务,需要满足业务的需求,再关注用户体验,也就是用户需...

积木创意科技
37分钟前
4
0
C++容器底层数据结构

内置数组: int arr[10][10];memset(arr,0,10*10*sizeof(int)); //初始化int tmp[10][10];memcpy(arr, tmp, 10 * 10 * sizeof(int));//拷贝 void *memcpy(void *destin, void *source,......

SibylY
37分钟前
4
0
Dubbo-自适应拓展机制

背景 在 Dubbo 中,很多拓展都是通过 SPI 机制进行加载的,比如 Protocol、Cluster、LoadBalance 等,这些都是Dubbo的基础组件。这些基础组件的拓展不是在系统框架启动阶段被加载,而是拓展方...

rock-man
今天
7
0
Kali安装fcitx输入法(五笔)

安装fcitx > sudo apt-get install fcitx-rime fcitx-config-gtk3 重启 > sudo reboot fcitx配置 效果就是这样 配置输入法切换 系统设置...

yeahlife
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部