Java 时间
LocalDateTime
0.时间比较
//isBefore
//isAfter
//截取部分代码片段
LocalDateTime.parse(tmp.get("ts").toString(), DATE_TIME_FORMATTER).isAfter(LocalDateTime.now().minusMinutes(config.getIncTime()))
// 获取时间戳
System.currentTimeMillis()
// 时间戳
LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli()
1. 时间格式枚举类
public enum TimeFormat {
// 短时间格式 年月日
/**
* 时间格式:yyyy-MM-dd
*/
SHORT_DATE_PATTERN_LINE("yyyy-MM-dd"),
/**
* 时间格式:yyyy/MM/dd
*/
SHORT_DATE_PATTERN_SLASH("yyyy/MM/dd"),
/**
* 时间格式:yyyy\\MM\\dd
*/
SHORT_DATE_PATTERN_DOUBLE_SLASH("yyyy\\MM\\dd"),
/**
* 时间格式:yyyyMMdd
*/
SHORT_DATE_PATTERN_NONE("yyyyMMdd"),
// 长时间格式 年月日时分秒
/**
* 时间格式:yyyy-MM-dd HH:mm:ss
*/
LONG_DATE_PATTERN_LINE("yyyy-MM-dd HH:mm:ss"),
/**
* 时间格式:yyyy/MM/dd HH:mm:ss
*/
LONG_DATE_PATTERN_SLASH("yyyy/MM/dd HH:mm:ss"),
/**
* 时间格式:yyyy\\MM\\dd HH:mm:ss
*/
LONG_DATE_PATTERN_DOUBLE_SLASH("yyyy\\MM\\dd HH:mm:ss"),
/**
* 时间格式:yyyyMMdd HH:mm:ss
*/
LONG_DATE_PATTERN_NONE("yyyyMMdd HH:mm:ss"),
// 长时间格式 年月日时分秒 带毫秒
LONG_DATE_PATTERN_WITH_MILSEC_LINE("yyyy-MM-dd HH:mm:ss.SSS"),
LONG_DATE_PATTERN_WITH_MILSEC_SLASH("yyyy/MM/dd HH:mm:ss.SSS"),
LONG_DATE_PATTERN_WITH_MILSEC_DOUBLE_SLASH("yyyy\\MM\\dd HH:mm:ss.SSS"),
LONG_DATE_PATTERN_WITH_MILSEC_NONE("yyyyMMdd HH:mm:ss.SSS");
private transient DateTimeFormatter formatter;
TimeFormat(String pattern) {
formatter = DateTimeFormatter.ofPattern(pattern);
}
}
2. 日期转换
// Obtains an instance of Date from an Instant object.
public static Date from(
Instant instant) {
try {
return new Date(instant.toEpochMilli());
} catch (ArithmeticException ex) {
throw new IllegalArgumentException(ex);
}
}
// Converts this Date object to an Instant.
public Instant toInstant() {
return Instant.ofEpochMilli(getTime());
}
/**
* 测试方法
*
* @return
*/
public Long getTime() {
return 1111111111111L;
}
// 这两个方法使我们可以方便的实现将旧的日期类转换为新的日期类,具体思路都是通过Instant当中介,然后通过Instant来创建LocalDateTime(这个类可以很容易获取LocalDate和LocalTime),新的日期类转旧的也是如此,将新的先转成LocalDateTime,然后获取Instant,接着转成Date,具体实现细节如下:
// 01. Date --> java.time.LocalDateTime
public static void UDateToLocalDateTime() {
Date date = new Date();
System.out.println("start :" + date);
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
LocalDateTime tmp = LocalDateTime.ofInstant(instant, zone);
System.out.println("end :" + tmp);
}
// 02. Date --> java.time.LocalDate
public static void UDateToLocalDate() {
Date date = new Date();
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
localDateTime.toLocalDate();
}
// 03. Date --> java.time.LocalTime
public static void UDateToLocalTime() {
Date date = new Date();
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
localDateTime.toLocalTime();
}
// 04. java.time.LocalDateTime --> Date
public static void LocalDateTimeToUdate() {
LocalDateTime localDateTime = LocalDateTime.now();
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDateTime.atZone(zone).toInstant();
Date date = Date.from(instant);
System.out.println(date);
}
// 05. java.time.LocalDate --> Date
public static void LocalDateToUdate() {
LocalDate localDate = LocalDate.now();
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
Date.from(instant);
}
// 06. java.time.LocalTime --> Date
public static void LocalTimeToUdate() {
LocalTime localTime = LocalTime.now();
LocalDate localDate = LocalDate.now();
LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDateTime.atZone(zone).toInstant();
Date.from(instant);
}
3. 计算时间差值
/**
* 通过Period 计算时间差,返回相差年月日
*/
public static void periodTest() {
LocalDate today = LocalDate.now();
System.out.println("Today : " + today);
LocalDate birthDate = LocalDate.of(1993, Month.OCTOBER, 19);
System.out.println("BirthDate : " + birthDate);
Period p = Period.between(birthDate, today);
System.out.printf("年龄 : %d 年 %d 月 %d 日", p.getYears(), p.getMonths(), p.getDays());
System.out.println();
/**
* Today : 2017-06-30
*
* BirthDate : 1993-10-19
*
* 年龄 : 23 年 8 月 11 日
*
*/
}
/**
* 通过Duration 计算时间查
*/
public static void durationTest() {
Instant inst1 = Instant.now();
System.out.println("Inst1 : " + inst1);
LocalDate.of(1993, Month.OCTOBER, 19);
Instant inst2 = inst1.plus(Duration.ofSeconds(1000));
System.out.println("Inst2 : " + inst2);
System.out.println("Difference in milliseconds : " + Duration.between(inst1, inst2).toMillis());
System.out.println("Difference in seconds : " + Duration.between(inst1, inst2).getSeconds());
System.out.println("Difference in minutes : " + Duration.between(inst1, inst2).getSeconds() / 60);
}
/**
* ChronoUnit类可用于在单个时间单位内测量一段时间,例如天数或秒。
* <p>
* 以下是使用between()方法来查找两个日期之间的区别的示例。
*/
public static void chronoUnitTest() {
LocalDate startDate = LocalDate.of(1993, Month.OCTOBER, 19);
System.out.println("开始时间 : " + startDate);
LocalDate endDate = LocalDate.of(2017, Month.JUNE, 16);
System.out.println("结束时间 : " + endDate);
// long hoursDiff = ChronoUnit.HOURS.between(startDate, endDate);
// //不能显示小时
// System.out.println("两时间的差在小时数 : " + hoursDiff);
long daysDiff = ChronoUnit.DAYS.between(startDate, endDate);
System.out.println("两时间的差在天数 : " + daysDiff);
long monthDiff = ChronoUnit.MONTHS.between(startDate, endDate);
System.out.println("两时间的差在月数 : " + monthDiff);
long yearDiff = ChronoUnit.YEARS.between(startDate, endDate);
System.out.println("两时间的差在年数 : " + yearDiff);
/**
* 开始时间 : 1993-10-19
* 结束时间 : 2017-06-16
* 两天之间的差在天数 : 8641
*
*/
Long minuteDiff = ChronoUnit.MINUTES.between(LocalDateTime.now(),
LocalDateTime.now().plusHours(2).plusMinutes(31).plusSeconds(20));
System.out.println("当前时间相差的分钟数时:---->" + minuteDiff);
}
/**
* ChronoUnit类可用于在单个时间单位内测量一段时间,例如天数或秒。
* <p>
* 以下是使用between()方法来查找两个日期之间的区别的示例。
*/
public static void chronoUnitTest2() {
LocalDateTime startDate = LocalDateTime.of(1993, Month.OCTOBER, 19, 1, 2);
System.out.println("开始时间 : " + startDate);
LocalDateTime endDate = LocalDateTime.of(2017, Month.JUNE, 16, 0, 4);
System.out.println("结束时间 : " + endDate);
// long hoursDiff = ChronoUnit.HOURS.between(startDate, endDate);
// //不能显示小时
// System.out.println("两时间的差在小时数 : " + hoursDiff);
long daysDiff = ChronoUnit.DAYS.between(startDate, endDate);
System.out.println("两时间的差在天数 : " + daysDiff);
long monthDiff = ChronoUnit.MONTHS.between(endDate, startDate);
System.out.println("两时间的差在月数 : " + monthDiff);
long yearDiff = ChronoUnit.YEARS.between(startDate, endDate);
System.out.println("两时间的差在年数 : " + yearDiff);
/**
* 开始时间 : 1993-10-19
*
* 结束时间 : 2017-06-16
*
* 两天之间的差在天数 : 8641
*
*/
}
public static void getWeek() {
LocalDateTime now = LocalDateTime.now();
int num = now.getDayOfYear();
System.out.println("一年的多少天:" + num);
}