我们在开发的时候,会遇到一些操作对时间的操作,比如获取当天零时零分零秒的,获取前一天的时间的。以及获取之前7天的时间。这些都可以当作一个系列来说。
1:获取当天相关的时间。
long current=System.currentTimeMillis();//当前时间毫秒数
long zero=current/(1000*3600*24)*(1000*3600*24)- TimeZone.getDefault().getRawOffset();//今天零点零分零秒的毫秒数
long twelve=zero+24*60*60*1000-1;//今天23点59分59秒的毫秒数
//当前时间
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(current)));
//今天零点零分零秒
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(zero)));
//今天23点59分59秒
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(twelve)));
特别说明:
TimeZone.getDefault().getRawOffset();在某些linux下获取时间会出现偏差()
Calendar calendar = Calendar.getInstance();
System.out.println("目前时间:" + calendar.getTime());
System.out.println("Calendar时区::" + calendar.getTimeZone().getID());
System.out.println("user.timezone:" + System.getProperty("user.timezone"));
System.out.println("user.country:" + System.getProperty("user.country"));
System.out.println("默认时区:" + TimeZone.getDefault().getID());
目前时间:Thu Sep 02 14:26:53 CST 2021
Calendar时区::Asia/Shanghai
user.timezone:Asia/Shanghai
user.country:US
TimeZone默认时区:Asia/Shanghai
这个时候就会出现问题。
2:获取昨天的时间
//昨天的这一时间的毫秒数
long yesterday=System.currentTimeMillis()-24*60*60*1000;
//昨天这一时间点
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(yesterday)));
//昨天零时零分零秒到23时59分59秒
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_MONTH, -1);
//这是昨天
Date yesterday = c.getTime();
String beginTime = DateFormatUtils.format(yesterday, "yyyy-MM-dd 00:00:00");
String endTime = DateFormatUtils.format(yesterday, "yyyy-MM-dd 23:59:59");
3:获取前几天的时间
当前时间的七天前的时间
Date nowDay=new Date();
Date oldDate = new Date(nowDay.getTime() -7 * 24 * 60 * 60 * 1000);
4:通过LocalDateTime来获取相应的时间
两天后零时零分零秒的时间
LocalDateTime dateTime = LocalDateTime.now().plusDays(2).withHour(0).withMinute(0).withSecond(0);