Java常用的时间操作
2020-09-08 本文已影响0人
HachiLin
1. Date与String互换
1.1 Date转String
public static String Date2Str(Date date, String format) {
// 自定义返回时间格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
return simpleDateFormat.format(date);
}
1.2 String转Date
public static String Str2Date(String str) throws ParseException{
// str对应的时间格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return simpleDateFormat.parse(str);
}
2. 日期Date常用操作
2.1 获取当前时间
public static Date getNow(){
return new Date();
}
2.2 得到两个时间相隔的天数
public static Long getBetweenDay(Date date1, Date date2) {
return (date2.getTime()-date1.getTime())/(1000*60*60*24);
}
2.3 获取年、月、日、时、分、秒
public static void getDateDetail(Date date) {
Calendar c=Calendar.getInstance(); //创建Calendar对象
c.setTime(date);
int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH)+1;
int day=c.get(Calendar.DAY_OF_MONTH);
int hour=c.get(Calendar.HOUR_OF_DAY);
int minute=c.get(Calendar.MINUTE);
int second=c.get(Calendar.MINUTE);
System.out.println("当前时间:"+year+"-"+month+"-"+day+"\t"+hour+":"+minute+":"+second);
}
2.4 判断两个时间是否在同一周
public static boolean isSameWeekDates(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);
int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
if (0 == subYear) {
if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)){
return true;
}
} else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) {
// 如果12月的最后一周横跨来年第一周的话则最后一周即算做来年的第一周
if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)){
return true;
}
} else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) {
if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)){
return true;
}
}
return false;
}
2.5 日期加一天
public static Date addCurrentDay(Date date){
Calendar cal=Calendar.getInstance(); //获取当前日期
cal.setTime(date); // Date转Calendar
cal.add(Calendar.DAY_OF_YEAR, +1);
return cal.getTime(); // Calendar转Date
}
2.6 获取某一天最大时间和最小时间
- 最大时间
// 例如:2020-09-08 23:59:59
public static Date getEndOfDay(Date date) {
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());;
LocalDateTime endOfDay = localDateTime.with(LocalTime.MAX);
return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
}
- 最小时间
// 例如:2020-09-08 00:00:00
public static Date getEndOfDay(Date date) {
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());;
LocalDateTime endOfDay = localDateTime.with(LocalTime.MIN);
return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
}
public static Date initDateByDay(){
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
return calendar.getTime();
}
2.7 判断某个时间是否在条件的起始时间与结束时间之内
public static boolean belongCalendar(Date time, Date from, Date to) {
Calendar date = Calendar.getInstance();
date.setTime(time);
Calendar after = Calendar.getInstance();
after.setTime(from);
Calendar before = Calendar.getInstance();
before.setTime(to);
if (date.after(after) && date.before(before)) {
return true;
} else {
return false;
}
}
3. LocalDateTime使用
3.1 介绍
Java的Date,Calendar类型使用起来并不是很方便,而且Date类(据说)有着线程不安全等诸多弊端。同时若不进行封装,会在每次使用时特别麻烦。于是Java8推出了线程安全、简易、高可靠的时间包。并且数据库中也支持LocalDateTime类型,在数据存储时候使时间变得简单。Java8这次新推出的包括三个相关的时间类型:LocalDateTime年月日十分秒;LocalDate日期;LocalTime时间;三个包的方法都差不多。
3.2 Date转LocalDateTime
public static LocalDateTime DateToLocalDateTime(Date date) {
ZoneId zone = ZoneId.systemDefault();
Instant instant = date.toInstant();
return LocalDateTime.ofInstant(instant, zone);
}
3.3 LocalDateTime转Date
public static LocalTimeToDate(LocalDateTime localDateTime) {
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDateTime.atZone(zone).toInstant();
return Date.from(instant);
}
3.4 返回指定格式当前日期
public static String getCurrentTime(String pattern) {
LocalDateTime now = LocalDateTime.now();
return now.format(DateTimeFormatter.ofPattern(pattern))
}
3.5 String转Date
/**
* @ param dateStr 待转换字符串
* @ param format 格式化字符串
**/
public static Date Str2Date(String dateStr, String format) {
// String -> LocalDateTime -> Date
LocalDateTime localDateTime = LocalDateTime.parse(dateStr, DateTimeFormatter.ofPattern(format));
ZoneId zone = ZoneId.systemDefault();
return Date.from(localDateTime.atZone(zone).toInstant());
}
3.6 Date转String
/**
* @ param dateStr 待转换日期
* @ param format 格式化字符串
**/
public static String Date2Str(Date date, String format){
// Date -> LocalDateTime -> String
DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
ZoneId zone = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(),zone);
return df.format(localDateTime);
}
参考文献
- https://www.cnblogs.com/jichi/p/10338172.html
- https://www.cnblogs.com/sharpest/p/7879377.html
- https://blog.csdn.net/gisboygogogo/article/details/78239925?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
- https://blog.csdn.net/qq_36827957/article/details/90286149
- https://blog.csdn.net/weixin_30784945/article/details/98251475?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.channel_param
- https://www.cnblogs.com/muxi0407/p/11713129.html