常用的JDK, apache自带的日期处理
Date->String
SimpleDataFormat: 非线程安全.
FastDataFormate: 线程安全, 对于同一种格式化日期的pattern,FastDateFormat可以保证只有一个实例产生,实现了对pattern的管理。这点上做了优化.
DateFormatUtils : 线程安全
private String initDate() {
Date d = new Date();
FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
return fdf.format(d);
}
String->Date
DateUtils:线程安全, 性能慢
parseDate
推荐 joda time
线程安全/性能快
String转DateTime
private static final DateTimeFormatter formatter = DateTimeFormat.forPattern(
"yyyy-MM-dd HH:mm:ss");
DateTime dateTime=formatter.parseDateTime(string);
DateTime dateTime=DateTime.parse(string,formatter);
DateTime转String
String dateStr=dateTime.toString("yyyy-MM-dd");
DateTime转Date/Time
Date date=dateTime.toDate();
计算两个日期间隔
int days=Days.dayBetween(beginDate,endDate).getDays();
日期各种操作
dateTime = dateTime.plusDays(1).plusHours(2).minusSeconds(3); //增减操作
代码示例:
package com.dhy.study;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.junit.Test;
import java.util.Date;
public class JodaTimeDemo {
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
@Test
public void func1() {
DateTime dt = new DateTime();
//获取当前年月日时分秒
System.out.println(dt.getYear() + " " + dt.getMonthOfYear() + " " + dt.getDayOfMonth() +" "
+ dt.getHourOfDay() + " " + dt.getMinuteOfHour() + " " + dt.getSecondOfMinute());
//可以使用plusXXX在原来的DateTime对象上产生新的对象
DateTime dt2 = dt.plusYears(1).plusMonths(1).plusDays(1);
//计算两个日期之间差了多少天
Days days = Days.daysBetween(dt, dt2);
System.out.println(days.getDays());
//使用参数构造一个DateTime对象
DateTime dt3 = new DateTime(2016, 7, 21, 0, 0, 0);
//转换为java中的Date对象
Date jdt = dt3.toDate();
//日期格式转换
System.out.println(DATE_TIME_FORMATTER.print(new DateTime()));
System.out.println(DATE_TIME_FORMATTER.parseDateTime("2016-07-21 12:00:00").toDate());
}
}