JAVA对于时间的花式操作(不定期更新)

JAVA对于时间的花式操作

  • 时间操作类
    • LocalDateTime/LocalDate
    • Date
    • Calendar
    • Instant
    • 时间操作类之间的互相转换
      • LocalDateTime -> LocalDate
      • LocalDateTime -> Date
      • LocalDateTime -> Instance
      • Date -> LocalDateTime/LocalDate
      • Date -> Calendar
      • Date -> Instant
      • Calendar -> Date
      • Calendar -> LocalDateTime
      • Instant -> LocalDateTime/LocalDate
      • Instant -> Date

时间操作类

LocalDateTime/LocalDate

//当前时间(yyyy-MM-dd HH:mm:ss.SSS)
LocalDateTime aa=LocalDateTime.now();
//获取日期
String dateStr=aa.toLocalDate().toString();
// 获取日期:2022-07-29
System.out.println("获取日期:" + dateStr);
//获取时间
String timeStr=aa.toLocalTime().toString();
int year=aa.getYear();
int month=aa.getMonthValue();
int day=aa.getDayOfMonth();
int hour=aa.getHour();
int minute=aa.getMinute();
int second=aa.getSecond();
// 获取时间:14:30:47.795,年:2022,月:7,日:29,时:14,分:30,秒:47
System.out.format("获取时间:%s,年:%d,月:%d,日:%d,时:%d,分:%d,秒:%d%n",timeStr,year,month,day,hour,minute,second);//获取日期时间字符串
String dataTimeStr=aa.toString();
// 获取日期时间字符串:2022-07-29T14:30:47.795
System.out.println("获取日期时间字符串:" + dataTimeStr);
//当前时间(yyyy-MM-dd)
LocalDate ld=LocalDate.now();
boolean isLeapYear = ld.isLeapYear();
System.out.println("今年是闰年:" + isLeapYear);// false
// 当前时间:2022-07-29
System.out.println("当前时间:" + ld);
//格式化当前时间
String formatter=aa.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println("格式化当前时间:" + formatter);// 2022-07-29 14:30:47
System.out.println("后5天时间:"+aa.plusDays(5)); // 2022-08-03T14:30:47.795
System.out.println("前5天时间并格式化:"+aa.minusDays(5).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); // 2022-07-24
System.out.println("前一个月的时间:"+aa.minusMonths(1).format(DateTimeFormatter.ofPattern("yyyyMM"))); // 202206
System.out.println("后一个月的时间:"+aa.plusMonths(1)); // 2022-08-29T14:30:47.795
System.out.println("指定2099年的当前时间:"+aa.withYear(2099)); // 2099-07-29T14:30:47.795//设置指定时间
LocalDate ld3=LocalDate.of(2017, Month.NOVEMBER, 17);//2017-11-17
LocalDate ld4=LocalDate.of(2018, 02, 11);//2018-02-11
LocalDateTime localDateTime = LocalDateTime.of(2019, Month.SEPTEMBER, 10, 14, 46, 56);
System.out.println("设置指定时间:" + localDateTime); // 2019-09-10T14:46:56
//日期相差比较
LocalDate ld1=LocalDate.parse("2017-11-17");
LocalDate ld2=LocalDate.parse("2018-01-05");
Period p=Period.between(ld1, ld2);
// 相差年: 0 相差月 :1 相差天:19
System.out.println("相差年: "+p.getYears()+" 相差月 :"+p.getMonths() +" 相差天:"+p.getDays());
//判断时间前后
// 当前时间
LocalDateTime ldt4 = LocalDateTime.now();
// 当前时间加10秒
LocalDateTime ldt5 = ldt4.plusMinutes(10);
// 当前时间是否大于:false
System.out.println("当前时间是否大于:"+ldt4.isAfter(ldt5));
// 当前时间是否小于:true
System.out.println("当前时间是否小于"+ldt4.isBefore(ldt5));

Date

// 获取系统当前的时间的毫秒值
long l = System.currentTimeMillis();
System.out.println(l);// 1659076976600
//将当前的时间和日期封装成对象
Date d = new Date();
System.out.println(d);// Fri Jul 29 14:42:56 CST 2022
//将指定的毫秒封装成对象
Date d1 = new Date(l);
System.out.println(d1);// Fri Jul 29 14:42:56 CST 2022
//获取当前的时间值
Date  d2 = new Date();
//获取日期对象格式
DateFormat  df = DateFormat.getDateInstance( );
String dat1= df.format(d2);
System.out.println(dat1); // 2022-7-29
//获取自定义格式的日期显示
df = new SimpleDateFormat("yyyy--MM--dd HH::mm::s" );
String dat2= df.format(d2);
System.out.println(dat2); // 2022--07--29 14::42::56String str1= "2015年6月20日";
DateFormat df1 = DateFormat.getDateInstance(DateFormat.LONG);
Date date = null;
try {date = df1.parse(str1);
} catch (ParseException e) {e.printStackTrace();
}
System.out.println(date);//Sat Jun 20 00:00:00 CST 2015// 比较时间
System.out.println("比较时间前者是否在后者之前: " + date.before(d2));// true
System.out.println("比较时间前者是否在后者之后: " + date.after(d2));// false

Calendar

// 获取当前时间
Calendar calendar = Calendar.getInstance();
System.out.println("当前Instant时间:" + calendar.toInstant().atZone(ZoneId.systemDefault()).toString());// 2022-07-29T15:02:13.116+08:00[Asia/Shanghai]
System.out.println("当前年:" + calendar.get(Calendar.YEAR));// 2022
System.out.println("当前月(从0开始计数):" + calendar.get(Calendar.MONTH));// 6
System.out.println("当前日:" + calendar.get(Calendar.DATE));// 29
System.out.println("当前小时(12小时制):" + calendar.get(Calendar.HOUR));// 3
System.out.println("当前分钟:" + calendar.get(Calendar.MINUTE));// 2
System.out.println("当前秒:" + calendar.get(Calendar.SECOND));// 13
System.out.println("当前毫秒:" + calendar.get(Calendar.MILLISECOND));// 116
System.out.println("当前小时(24小时制):" + calendar.get(Calendar.HOUR_OF_DAY));// 15
System.out.println("当前周的第几天(星期日为1,以此推算):" + calendar.get(Calendar.DAY_OF_WEEK));// 6
System.out.println("当前月中的第几天:" + calendar.get(Calendar.DAY_OF_MONTH));// 29
System.out.println("当前年的第几天:" + calendar.get(Calendar.DAY_OF_YEAR));// 210
System.out.println("当前月中的第几周:" + calendar.get(Calendar.WEEK_OF_MONTH));// 5
System.out.println("当前年的第几周:" + calendar.get(Calendar.WEEK_OF_YEAR));// 31Calendar calendar1 = Calendar.getInstance();
calendar1.add(Calendar.DATE,34);//以日为单位,增加34天
System.out.println("操作后的日:" + calendar1.get(Calendar.DATE));// 1
System.out.println("操作后的月(从1开始计数):" + calendar1.get(Calendar.MONTH));// 8(8月)
// roll()方法会加日,但是月份不会改变
Calendar calendar2 = Calendar.getInstance();
calendar2.roll(Calendar.DATE,34);//以日为单位,增加34天
System.out.println("操作后的日:" + calendar2.get(Calendar.DATE));// 1
System.out.println("操作后的月(依然是操作前的月,从0开始计数):" + calendar2.get(Calendar.MONTH));//6(7月)// 设置对象的年月日内容
calendar.set(1999, 1, 20);
System.out.println(calendar.get(Calendar.DATE));//20
System.out.println(calendar.get(Calendar.MONTH));//1
System.out.println(calendar.get(Calendar.YEAR));//1999// set()修改了什么内容才会变内容,没有修改的还是set前的内容
System.out.println("小时:" + calendar.get(Calendar.HOUR_OF_DAY));//15// 内容格式化,需转化成Date
Date time = calendar.getTime();
SimpleDateFormat sdf =new SimpleDateFormat("yyyy--MM--dd HH::mm::ss");
// 格式化后,月会变为当前月,不是从0开始计数的内容
System.out.println(sdf.format(time));// 1999--02--20 15::19::16
// 比大小,必须全是Calendar对象,否则,返回false
System.out.println(calendar.after(calendar2));
System.out.println(calendar.before(calendar1));
// 前者后于后者,返回1,前者先于后者,返回-1,前者等于后者,返回0
System.out.println(calendar.compareTo(calendar));

Instant

//时间相差
Instant inst1 = Instant.now();//获取当前瞬时时间
// 当前时间戳 : 2022-07-29T06:16:18.710Z
System.out.println("当前时间戳 : " + inst1);
Instant inst2 = inst1.plus(Duration.ofSeconds(10));//指定时间加10秒
// 增加之后的时间 : 2022-07-29T06:16:28.710Z
System.out.println("增加之后的时间 : " + inst2);
// 相差毫秒 : 10000
System.out.println("相差毫秒 : " + Duration.between(inst1, inst2).toMillis());
// 相毫秒 : 10
System.out.println("相毫秒 : " + Duration.between(inst1, inst2).getSeconds());
// 相差毫秒1 : -10000
System.out.println("相差毫秒1 : " + Duration.between(inst2, inst1).toMillis());
// 相毫秒1 : -10
System.out.println("相毫秒1 : " + Duration.between(inst2, inst1).getSeconds());

时间操作类之间的互相转换

LocalDateTime -> LocalDate

LocalDate localDate = localDateTime.toLocalDate();

LocalDateTime -> Date

// 从默认时区的系统时钟获取当前的日期时间
LocalDateTime localDateTime = LocalDateTime.now();
// 将此日期时间与时区相结合以创建 ZonedDateTime
ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault());
// 本地时间线LocalDateTime到即时时间线Instant时间戳
Instant instant = zonedDateTime.toInstant();
// UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间
Date date = Date.from(instant);

LocalDateTime -> Instance

Instant instant = Instant.from(LocalDateTime.now());

Date -> LocalDateTime/LocalDate

Date date = new Date();
Instant instant = date.toInstant();
//Date转换为LocalDateTime
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
//获取LocalDate
LocalDate localDate = localDateTime.toLocalDate();

Date -> Calendar

Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date );

Date -> Instant

Date date = new Date();
Instant instant = date.toInstant();

Calendar -> Date

Calendar calendar = Calendar.getInstance();  
Date date = calendar.getTime();

Calendar -> LocalDateTime

Calendar calendar = Calendar.getInstance();  
LocalDateTime thisDateTime = LocalDateTime.ofInstant(calendar, ZoneOffset.systemDefault()); 

Instant -> LocalDateTime/LocalDate

LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault()); 

Instant -> Date

Date date = Date.from(Instant.now());


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部