开始使用 java8 的日期工具类
例如,现有的类(例如java.util.Date和SimpleDateFormatter)不是线程安全的,这会导致用户潜在的并发问题。而新的LocalDate、LocalDateTime、DateTimeFormatter是不可变值类。
LocalDate和LocalTime。它们是本地的,它们从观察者的角度表示日期和时间,例如书桌上的日历或墙上的时钟。还有一种称为复合类LocalDateTime,这是一个配对LocalDate和LocalTime。
下面是一个简单的思维导图和一个基于LocalDate、LocalDateTime...实现的日期工具类可以帮助我们记住一些类、API...,日期工具类中引入了gvava工具包。maven依赖如下
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>28.1-jre</version>
</dependency>
import com.google.common.base.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.Timestamp;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.temporal.*;
import java.util.*;
public class Date8Util {
private static final Logger logger = LoggerFactory.getLogger(Date8Util.class);
public static final HashMap<String,String> fomatMap = new HashMap();
static {
fomatMap.put("DATE_FORMAT_DEFAULT","yyyy-MM-dd HH:mm:ss");
fomatMap.put("FORMATE1","yyyy-MM-dd hh:mm:ss");
fomatMap.put("DATE_FORMAT_YYYYMMDD","yyyy-MM-dd");
fomatMap.put("DATE_FORMAT_YYYYMMDDHHSSMS","yyyyMMddHHmmssms");
fomatMap.put("DATE_FORMAT_YYYYMMDDHHSS","yyyyMMddHHmmss");
fomatMap.put("DATE_FORMAT_YYYY_MM_DD","yyyyMMdd");
fomatMap.put("DATE_FORMAT_YYYY_MM","yyyyMM");
fomatMap.put("DATE_FORMAT_HHmmss","HHmmss");
fomatMap.put("DATE_FORMAT_JQUERY_DATEPICKER_DEFAULT","yyyy/MM/dd");
fomatMap.put("FORMATE_PATTERN_C_YYYYMMDD","yyyy年MM月dd日");
fomatMap.put("FORMATE_PATTERN_C_MMDD","MM月dd日");
fomatMap.put("FORMATE_PATTERN_C_YYYYMM","yyyy年MM月");
}
/**
* 获取当前日期时间 yyyy-MM-dd HH:mm:ss
* @return
*/
public static String getTime(){
LocalDateTime date = LocalDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(fomatMap.get("DATE_FORMAT_DEFAULT"), Locale.CHINA);
return date.format(dtf);
}
/**
* 当前日期 字符串日期格式
* @return Date
*/
public static Date getNowDate(){
return Timestamp.valueOf(getTime());
}
/**
* 当前日期.yyyy-MM-dd
* @return
*/
public static String getCurrentDate(){
return LocalDate.now().format(DateTimeFormatter.ofPattern(fomatMap.get("DATE_FORMAT_YYYYMMDD"), Locale.CHINA));
}
/**
* @Description 当前日期时间 yyyyMMddHHmmssms
* @return
*/
public static String getCurrDate(){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(fomatMap.get("DATE_FORMAT_YYYYMMDDHHSSMS"), Locale.CHINA));
}
public static String getNowDate(String fomat){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(fomat,Locale.CHINA));
}
/**
* 字符串转日期
* @param aMask
* @param aDate
* @return
*/
public static String convertDateToString(String aMask, Date aDate){
//Date 转化位 LocalDateTime
LocalDateTime dateTime = LocalDateTime.ofInstant(aDate.toInstant(),ZoneId.systemDefault());
return getDateTime(aMask, dateTime);
}
public static String convertDateToString(String aMask, LocalDateTime dateTime){
return getDateTime(aMask, dateTime);
}
/**
* 获取date time
* @param fmt
* @param dateTime
* @return
*/
private static String getDateTime(String fmt, LocalDateTime dateTime) {
DateTimeFormatter dtf = null;
String str = "";
if(dateTime != null){
dtf = DateTimeFormatter.ofPattern(fmt,Locale.CHINA);
str = dateTime.format(dtf);
}
return str;
}
/**
* 日期字符串转 日期
* @param fmt
* @param dateStr
* @return
*/
public static LocalDate convertStringToDate(String fmt,String dateStr){
if (Strings.isNullOrEmpty(fmt) || Strings.isNullOrEmpty(dateStr)) {
return null;
} else {
DateTimeFormatter sdf = DateTimeFormatter.ofPattern(fmt,Locale.CHINA);
try {
return LocalDate.parse(dateStr,sdf);
} catch (DateTimeParseException var4) {
logger.error("ParseException[" + fmt + "] for:" + dateStr, var4);
return null;
}
}
}
/**
* 获取 日期所在月份的第一天 date为空传当前月
* @param date
* @return
*/
public static LocalDate getFirstDayOfMonth(LocalDate date){
return Optional.ofNullable(date).map(dt -> dt.with(TemporalAdjusters.firstDayOfMonth())).orElse(null);
}
/**
* 获取 日期所在月份的最后一天,date为空传当前月
* @param date
* @return
*/
public static LocalDate getLastDayOfMonth(LocalDate date){
return Optional.ofNullable(date).map(dt -> dt.with(TemporalAdjusters.lastDayOfMonth())).orElse(null);
}
/**
* 获取上一个月的这个时候,例如当前日期2002-09-11,则返回2020-08-11
* @param date
* @return
*/
public static LocalDate getMonthOfMonth(LocalDate date){
return Optional.ofNullable(date).map(dt -> dt.minusMonths(1)).orElse(null);
}
/**
* 获取系统日期时间
* @return
*/
public static LocalDateTime getSystemTime(){
return LocalDateTime.ofInstant(Instant.now(),ZoneId.systemDefault());
}
/**
* 日期时间 转字符串
* @param dateTime
* @param pattern
* @return
*/
public static String dateTimeToString(LocalDateTime dateTime, String pattern){
if(dateTime == null || Strings.isNullOrEmpty(pattern)){
return null;
}
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern,Locale.CHINA);
return dateTime.format(dtf);
}
/**
* 两个日期相隔的天数
* @param startdate
* @param endDate
* @return
*/
public static int daysOfTwo(LocalDate startdate, LocalDate endDate){
return (int) startdate.until(endDate, ChronoUnit.DAYS);
}
public static int daysOfTwo(String startdate, String endDate, String dateFormat){
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(dateFormat,Locale.CHINA);
LocalDate smDate = LocalDate.parse(startdate,dtf);
LocalDate bDate = LocalDate.parse(endDate,dtf);
return (int)smDate.until(bDate,ChronoUnit.DAYS);
}
/**
* 昨天日期
* @return
*/
public static String getYesterday(){
LocalDate now = LocalDate.now();
return now.minusDays(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd",Locale.CHINA));
}
/**
* 比较日期大小
* @param date1
* @param date2
* @return
*/
public static int compare(String date1, String date2){
DateTimeFormatter dtf = null;
if(date1.indexOf(":") > -1 && date2.indexOf(":") > -1){
dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss",Locale.CHINA);
LocalDateTime dateTime1 = LocalDateTime.parse(date1,dtf);
LocalDateTime dateTime2 = LocalDateTime.parse(date2,dtf);
if(dateTime1.isBefore(dateTime2)){
return -1;
}
return dateTime1.isAfter(dateTime2) ? 1:0;
}else{
dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd",Locale.CHINA);
LocalDate dt1 = LocalDate.parse(date1,dtf);
LocalDate dt2 = LocalDate.parse(date2,dtf);
if(dt1.isBefore(dt2)){
return -1;
}
return dt1.isAfter(dt2) ? 1:0;
}
}
/**
* 获取日期 x年x月x日
* @param date
* @return
*/
public static String getFormatDate(String date){
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.parse(date,dtf2);
return localDate.format(dtf);
}
/**
* data1 是否 大于date2
* @param date1
* @param date2
* @param format
* @return
*/
public static boolean date1DYdate2NY(String date1, String date2, String format){
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format,Locale.CHINA);
LocalDate dt1 = LocalDate.parse(date1,dtf);
LocalDate dt2 = LocalDate.parse(date2,dtf);
return dt1.isAfter(dt2);
}
public static String getTimeYYYYMMDD() {
DateTimeFormatter sdf = DateTimeFormatter.ofPattern("yyyyMMdd",Locale.CHINA);
return LocalDate.now().format(sdf);
}
public static String getTimeHHmmss() {
DateTimeFormatter sdf = DateTimeFormatter.ofPattern("HHmmss",Locale.CHINA);
return LocalTime.now().format(sdf);
}
public static String getTimeHHmmss000() {
DateTimeFormatter sdf = DateTimeFormatter.ofPattern("HHmmss000",Locale.CHINA);
return LocalTime.now().format(sdf);
}
public static LocalDateTime changeMonth(LocalDateTime date, int i) {
return date.minusMonths(i);
}
public static String changeMonth(int month, String format) {
LocalDateTime dateTime = changeMonth(LocalDateTime.now(),month);
return dateToString(getFirstDayOfMonth(dateTime.toLocalDate()), format);
}
private static String dateToString(LocalDate date, String format) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format,Locale.CHINA);
return date.format(dtf);
}
/**
* 获取上年第一天
* @param format
* @param year
* @return
*/
public static String getFirstDayOfPastYear(String format, int year) {
LocalDateTime dateTime = LocalDateTime.now().minusYears(year);
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format,Locale.CHINA);
String sdate = dateTime.with(TemporalAdjusters.firstDayOfYear()).format(dtf) ;
return sdate;
}
public static String getFirstDayOfLastYear(String format) {
return getFirstDayOfPastYear(format, 1);
}
/**
* 获取上x年的的最后一天
* @param format
* @param year
* @return
*/
public static String getLastDayOfPastYear(String format, int year) {
LocalDateTime dateTime = LocalDateTime.now().minusYears(year);
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(format,Locale.CHINA);
String sdate = dateTime.with(TemporalAdjusters.lastDayOfYear()).format(dtf) ;
return sdate;
}
/**
* 获取上1年的的最后一天
* @param format
* @return
*/
public static String getLastDayOfLastYear(String format) {
return getLastDayOfPastYear(format, 1);
}
/**
* 当前月 + month 的第一天
* @param month
* @return
*/
public static String getFirstDayOfMonth(int month) {
LocalDate localDate = LocalDate.now().minusMonths(-month);
LocalDate day = localDate.with(TemporalAdjusters.firstDayOfMonth());
return dateToString(getFirstDayOfMonth(day), "yyyy-MM-dd");
}
/**
* 当前年+year , 月 + month 的第一天
* @param month
* @return
*/
public static String getFirstDayOfMonth(int month, int year) {
LocalDate localDate = LocalDate.now().minusYears(-year).minusMonths(-month);
LocalDate day = localDate.with(TemporalAdjusters.firstDayOfMonth());
return dateToString(getFirstDayOfMonth(day), "yyyy-MM-dd");
}
public static boolean isMonthEnd(LocalDate date){
LocalDate day = date.with(TemporalAdjusters.lastDayOfMonth());
if(date.equals(day)){
return true;
}
return false;
}
public static boolean isFirstDayOfMonth(String date){
LocalDate dt = convertStringToDate("yyyy-MM-dd",date);
return Strings.isNullOrEmpty(date) ? false : dt.equals(dt.with(TemporalAdjusters.firstDayOfMonth()));
}
public static LocalDate getFirstDayOfWeek(LocalDate date){
TemporalField fieldISO = WeekFields.ISO.dayOfWeek();
return date.with(fieldISO,1);
}
}
开始使用 java8 的日期工具类的更多相关文章
- 日期工具类 - DateUtil.java
日期工具类,提供对日期的格式化和转换方法.获取区间日期.指定日期.每月最后一天等. 源码如下:(点击下载 -DateUtil.java.commons-lang-2.6.jar ) import ja ...
- JS 日期工具类-基于yDate
源码下载 前言:最近在用到JS日期操作时,发现有一些不方便,于是搜素了一些网上的资料,基于一个开源工具类-yDate 进行了个性化定制,封装成了一个日期工具类工具函数大概介绍:1.普通的日期操作2. ...
- Java日期工具类,Java时间工具类,Java时间格式化
Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...
- JAVA 8 日期工具类
JAVA 8 日期工具类 主题描述 JAVA中日期时间的历史 代码成果 主题描述 JAVA的日期时间一直比较混乱,本来以为joda会是巅峰,但是JAVA 8改变了我的思想.但是即便在JAVA 8面前, ...
- java 日期工具类DateUtils
日期工具类DateUtils CreateTime--2017年5月27日08:48:00Author:Marydon DateUtils.java-对日期类的进一步封装 import java. ...
- java日期工具类DateUtil-续一
上篇文章中,我为大家分享了下DateUtil第一版源码,但就如同文章中所说,我发现了还存在不完善的地方,所以我又做了优化和扩展. 更新日志: 1.修正当字符串日期风格为MM-dd或yyyy-MM时,若 ...
- java日期工具类DateUtil-续二
该版本是一次较大的升级,农历相比公历复杂太多(真佩服古人的智慧),虽然有规律,但涉及到的取舍.近似的感念太多,况且本身的概念就已经很多了,我在网上也是查阅了很多的资料,虽然找到一些计算的方法,但都有些 ...
- java日期工具类DateUtil
一名优秀的程序员,不仅需要有着丰富解决问题的方案,还需要的便是代码的沉淀,这不仅有助于自己快速的开发程序,也有利于保证程序的健壮.那如何才能沉淀自己的”代码“呢?从自己编写util开始其实就是一个不错 ...
- 日期工具类 DateUtils(继承org.apache.commons.lang.time.DateUtils类)
/** * */ package com.dsj.gdbd.utils.web; import org.apache.commons.lang3.time.DateFormatUtils; impor ...
随机推荐
- unordered_set
用哈希表实现的 https://blog.csdn.net/dream_you_to_life/article/details/46785741
- Bitmap缩放(二)
先得到位图宽高不用加载位图,然后按ImageView比例缩放,得到缩放的尺寸进行压缩并加载位图.inSampleSize是缩放多少倍,小于1默认是1,通过调节其inSampleSize参数,比如调节为 ...
- day1-linux基础命令
1.创建文件 ①touch 1.txt ②echo > 2.txt ③vim 3.txt 以上方式都能直接创建文件 批量创建文件 2.创建目录 ①mkdir /software ②创建连续目录 ...
- Sublime Text:性感无比的代码编辑器安装破解配置教程
代码编辑器或者文本编辑器,对于程序员来说,就像剑与战士一样,谁都想拥有一把可以随心驾驭且锋利无比的宝剑,而每一位程序员,同样会去追求最适合自己的强大.灵活的编辑器,相信你和我一样,都不会例外. 我用过 ...
- 【QT】QtConcurrent::run()+QThreadPool实现多线程
往期链接: <QThread源码浅析> <子类化QThread实现多线程> <子类化QObject+moveToThread实现多线程> <继承QRunnab ...
- 庐山真面目之三微服务架构Consul版本实现
庐山真面目之三微服务架构Consul版本实现 一.简介 在上一篇文章<庐山真面目之二微服务架构NGINX版本实现>中,我们已经探讨了如何搭建基于Nginx 网关的微服务 ...
- QQ彩贝热销时装
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Python基础教程分享,视频教程免费下载!
给大家分享一套我初学Python时看的一套基础教程,是视频教程,免费分享给大家,希望对正在学习Python或者打算学习Python的朋友有帮助哈~~ 废话不多说 为期92天的Python基础教程视频教 ...
- S5830 android 2.3.4和2.3.7
12年元旦买的手机S5830,原机自带2.3.4的系统. 看到人家的机子2.3.6的效果稍微绚一点,动了想刷机的念头. 前两天刷了2.3.7,效果还满意,用的还舒服,感觉就是有些费电, 本来就对智能手 ...
- 虚拟DOM与diff算法
虚拟DOM与diff算法 虚拟DOM 在DOM操作中哪怕我们的数据,发生了一丢丢的变化,也会被强制重建整预DOM树.这么做,涉及到很多元素的重绘和重排,导致性能浪费严重 只要实现按需更新页面上的元素即 ...