一.Joda-Time
相对于jdk1.8之前,计算日期有多繁琐,而且simpleDateFormat 是线程不安全的同时没有时区的概念;
//获取本地时间 年月日
LocalDate localDate = LocalDate.now(); //2018-11-23
// 获取明年的明天明日 日期的增加
LocalDate featureYear = localDate1.plusYears(1).plusMonths(1).plusDays(1);
2019-12-24
// 获取出年时间
LocalDate featureYear = localDate1.minusYears(1).minusMonths(1).minusDays(1); //2017-10-22
//而且与 java中Date相互转换
Date javaDate = featureYear.toDate(); //Sun Oct 22 00:00:00 CST 2017
//获取年月日
LocalDateTime locaDateTime = LocalDateTime.now();
可以看出 joda-time使用起来很方便
joda-time 使用连接地址 https://www.joda.org/joda-time/
二. Joda-Time is the de facto standard date and time library for Java prior to Java SE 8. Users are now asked to migrate to java.time (JSR-310). joda-time从 java8已经迁移进来了
下面介绍 java8中 localDateTime 和java中的 Date相互转换工具
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Date;
/**
* ......................................
* .没有才怎么怀才不遇,没有志怎么壮志难酬 .
* . ....................................
*
*@Author: lq
*@Date: 2018/11/23 9:03
*@Description: java中的Date和 localDate 转换
*/
public class Date2LocalTime {
public static final String FORMAT_ALL = "yyyy-MM-dd HH:mm:ss";
public static final String FORMAT_LONG = "yyyyMMddHHmmss";
public static final String FORMAT_YEAR_MONTH = "yyyy-MM-dd";
public static final String FORMAT_YEARMONTH = "yyyyMMdd";
/**
* joda的 date和java中的 date相互转换 使用的是UTC
* @return
*/
public static Date localDateTime2JavaDate(LocalDateTime localDateTime) {
//获得到本地的时区
ZoneId localZone = ZoneId.systemDefault();
ZonedDateTime zdt = localDateTime.atZone(localZone);
Date date = Date.from(zdt.toInstant());
return date;
}
/**
* 将 java中的Date转换为 joda time时间
* @param date
* @return
*/
public static LocalDateTime javaDate2LocalDate(Date date) {
//获得到本地的时区
Instant instant = date.toInstant();
ZoneId localZone = ZoneId.systemDefault();
LocalDateTime localDateTime = instant.atZone(localZone).toLocalDateTime();
return localDateTime;
}
/**
* 将 joda localDatetime 转换为String类型
* @param localDateTime
* @param pattern
* @return
*/
public static String localDateTime2String(LocalDateTime localDateTime,String pattern) {
DateTimeFormatter dtf = null;
if (localDateTime == null) {
throw new IllegalArgumentException("传入时间不能为空");
}
if (pattern == null) {
dtf = DateTimeFormatter.ofPattern(FORMAT_ALL);
}else {
dtf = DateTimeFormatter.ofPattern(pattern);
}
return dtf.format(localDateTime);
}
/**
* 将 java中的日期转为 String类型
* @param date
* @param pattern
* @return
*/
public static String javaDate2String(Date date,String pattern) {
SimpleDateFormat sdf = null;
if (date == null) {
throw new IllegalArgumentException("传入时间不能为空");
}
if (pattern == null) {
sdf = new SimpleDateFormat(FORMAT_ALL);
}else {
sdf = new SimpleDateFormat(pattern);
}
return sdf.format(date);
}
/**
* 将字符串转为 java中的日期类型
* @param date
* @param pattern
* @return
*/
public static Date string2javaDate(String date,String pattern) {
SimpleDateFormat sdf = null;
if (date == null) {
throw new IllegalArgumentException("传入时间不能为空");
}
if (pattern == null) {
sdf = new SimpleDateFormat(FORMAT_ALL);
}else {
sdf = new SimpleDateFormat(pattern);
}
try {
return sdf.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 将 String字符串转为 joda localDateTime
* @param date
* @param pattern
* @return
*/
public static LocalDateTime string2LocalDateTime(String date,String pattern) {
DateTimeFormatter dtf = null;
if (date == null) {
throw new IllegalArgumentException("传入时间不能为空");
}
if (pattern == null) {
dtf = DateTimeFormatter.ofPattern(FORMAT_ALL);
}else {
dtf = DateTimeFormatter.ofPattern(pattern);
}
return LocalDateTime.parse(date,dtf);
}
public static void main(String[] args) {
LocalDateTime lo = LocalDateTime.now();
System.out.println(LocalDate.now());
System.out.println(localDateTime2String(lo.minusYears(1),"yyyy-MM-dd HH:mm:ss"));
System.out.println(localDateTime2JavaDate(lo));
System.out.println(javaDate2LocalDate(new Date()));
System.out.println(javaDate2String(new Date(),null));
System.out.println(string2LocalDateTime("2018-11-23 10:10:23",null));
}
输出结果: