java8 日期时间处理
2017-11-06 23:35
337 查看
之前有个项目频繁用到年、月、周的数据库统计。为此专门写了一个蛮复杂的工具类。最近了解了一下java8的新日期时间类库,简直方便到感人。重构了一下代码,行数少了多一半,有些方法直接删掉了,因为已经自带了。适用多种业务场景:展示、统计、设置有效期、增加/减少日期、日期比较等。
package com.utils.zjc;
import java.time.DayOfWeek;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
public class DateMethod8{
//把毫秒数转换为标准日期时间字符串
public String formatMilliSecond(long milliSeconds) {
ZoneId z=ZoneId.systemDefault();
Instant instant = Instant.now();
LocalDateTime datetime = LocalDateTime.ofEpochSecond(milliSeconds/1000, 0,z.getRules().getOffset(instant));
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return datetime.format(formatter);
}
//获取当前日期时间字符串
public String getNowDateAndTimeString() {
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return now.format(formatter);
}
//获取当前日期字符串
public String getNowDateString() {
LocalDate today=LocalDate.now();
return today.toString();
}
//获取当前时间字符串
public String getNowTimeString() {
LocalTime now = LocalTime.now();
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("HH:mm:ss");
return now.format(formatter);
}
//获取某年某月第一天
public String getYearMonthFirstDayString(int year, int month) throws Exception {
if(month<1||month>12){
throw new Exception("invalid parameters");
}
Integer iyear = Integer.valueOf(year);
Integer imonth = Integer.valueOf(month);
if(month<10){
return iyear.toString()+"-0"+imonth.toString()+"-01 00:00:00";
}else{
return iyear.toString()+"-"+imonth.toString()+"-01 00:00:00";
}
}
//获取某年某月最后一天
public String getYearMonthLastDayString(int year, int month) throws Exception {
if(month<1||month>12){
throw new Exception("invalid parameters");
}
LocalDate date = LocalDate.of(year,month,1);
Integer lastday=date.getMonth().length(date.isLeapYear());
Integer iyear = Integer.valueOf(year);
Integer imonth = Integer.valueOf(month);
if(month<10){
return iyear.toString()+"-0"+imonth.toString()+"-"+lastday.toString()+" 23:59:59";
}else{
return iyear.toString()+"-"+imonth.toString()+"-"+lastday.toString()+" 23:59:59";
}
}
//获取某年某月某日所在周的某一天
public String getWeekDayString(int year, int month, int day, DayOfWeek dow) throws Exception{
try{
LocalDate date = LocalDate.of(year,month,day);
LocalDate newDate = date.with(TemporalAdjusters.nextOrSame(dow));
return newDate.toString();
}catch(Exception e){
throw new Exception("invalid parameters");
}
}
public static void main(String[] args){
LocalDateTime now = LocalDateTime.now();
LocalDateTime nextMonth = now.plusMonths(1); //向后延续一个月
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(nextMonth.format(formatter));
int compareResult = nextMonth.compareTo(now); //比较日期和时间
if(compareResult>0){
System.out.println("晚于当前");
}else if(compareResult==0){
System.out.println("相同");
}else{
System.out.println("早于当前");
};
LocalDate temp = LocalDate.now();
System.out.println(temp.with(TemporalAdjusters.lastDayOfMonth()));//月末一天的另一种方法
Duration dtime = Duration.between(now, nextMonth); //计算时间间隔
long seconds = dtime.getSeconds();//秒表示
long millis = dtime.toMillis();//毫秒表示
System.out.println(seconds);
System.out.println(millis);
try{
LocalDate newDate = LocalDate.of(2005,2,28); //验证日期有效性
LocalDateTime newTime = LocalDateTime.of(newDate, LocalTime.now());
System.out.println("日期有效");
System.out.println(newTime.format(formatter));
}catch(Exception e){
System.out.println("日期无效");
}
}
}
package com.utils.zjc;
import java.time.DayOfWeek;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
public class DateMethod8{
//把毫秒数转换为标准日期时间字符串
public String formatMilliSecond(long milliSeconds) {
ZoneId z=ZoneId.systemDefault();
Instant instant = Instant.now();
LocalDateTime datetime = LocalDateTime.ofEpochSecond(milliSeconds/1000, 0,z.getRules().getOffset(instant));
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return datetime.format(formatter);
}
//获取当前日期时间字符串
public String getNowDateAndTimeString() {
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return now.format(formatter);
}
//获取当前日期字符串
public String getNowDateString() {
LocalDate today=LocalDate.now();
return today.toString();
}
//获取当前时间字符串
public String getNowTimeString() {
LocalTime now = LocalTime.now();
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("HH:mm:ss");
return now.format(formatter);
}
//获取某年某月第一天
public String getYearMonthFirstDayString(int year, int month) throws Exception {
if(month<1||month>12){
throw new Exception("invalid parameters");
}
Integer iyear = Integer.valueOf(year);
Integer imonth = Integer.valueOf(month);
if(month<10){
return iyear.toString()+"-0"+imonth.toString()+"-01 00:00:00";
}else{
return iyear.toString()+"-"+imonth.toString()+"-01 00:00:00";
}
}
//获取某年某月最后一天
public String getYearMonthLastDayString(int year, int month) throws Exception {
if(month<1||month>12){
throw new Exception("invalid parameters");
}
LocalDate date = LocalDate.of(year,month,1);
Integer lastday=date.getMonth().length(date.isLeapYear());
Integer iyear = Integer.valueOf(year);
Integer imonth = Integer.valueOf(month);
if(month<10){
return iyear.toString()+"-0"+imonth.toString()+"-"+lastday.toString()+" 23:59:59";
}else{
return iyear.toString()+"-"+imonth.toString()+"-"+lastday.toString()+" 23:59:59";
}
}
//获取某年某月某日所在周的某一天
public String getWeekDayString(int year, int month, int day, DayOfWeek dow) throws Exception{
try{
LocalDate date = LocalDate.of(year,month,day);
LocalDate newDate = date.with(TemporalAdjusters.nextOrSame(dow));
return newDate.toString();
}catch(Exception e){
throw new Exception("invalid parameters");
}
}
public static void main(String[] args){
LocalDateTime now = LocalDateTime.now();
LocalDateTime nextMonth = now.plusMonths(1); //向后延续一个月
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(nextMonth.format(formatter));
int compareResult = nextMonth.compareTo(now); //比较日期和时间
if(compareResult>0){
System.out.println("晚于当前");
}else if(compareResult==0){
System.out.println("相同");
}else{
System.out.println("早于当前");
};
LocalDate temp = LocalDate.now();
System.out.println(temp.with(TemporalAdjusters.lastDayOfMonth()));//月末一天的另一种方法
Duration dtime = Duration.between(now, nextMonth); //计算时间间隔
long seconds = dtime.getSeconds();//秒表示
long millis = dtime.toMillis();//毫秒表示
System.out.println(seconds);
System.out.println(millis);
try{
LocalDate newDate = LocalDate.of(2005,2,28); //验证日期有效性
LocalDateTime newTime = LocalDateTime.of(newDate, LocalTime.now());
System.out.println("日期有效");
System.out.println(newTime.format(formatter));
}catch(Exception e){
System.out.println("日期无效");
}
}
}
相关文章推荐
- java处理日期时间 相加减
- 发现一个很全的java处理时间日期类型的类
- Java 时间(日期)相加处理
- java日期时间处理工具类
- 如何在Java 8中愉快地处理日期和时间
- JAVA中的日期时间处理问题
- 如何在Java 8中愉快地处理日期和时间
- java对日期时间的处理
- 如何在Java 8中愉快地处理日期和时间
- java语言基础(63)——日期时间处理方法(Date DateFormat Calendar)
- jAVA处理日期(Date)时间(Time)以及相关类的介绍
- Java中日期时间的处理
- 如何在Java 8中愉快地处理日期和时间
- Java 的日期与时间处理
- java Date 时间 日期 处理
- Java处理日期时间的方法汇总
- Java中对时间、日期的处理
- JAVA处理日期时间常用方法: java.util.Calendar
- java中的日期和时间处理示例
- java处理日期时间 相加减大全