请打印出昨天的此时此刻,这是我在面试一家公司时的面试题,在看到这道题的那一刻我有点蒙圈,因为我首先想到的是通过实例calender来依次获取日期,通过其day-1来实现此时此刻,但是这样会导致代码过长,显然不符合笔试特征,如下:
Calender cal = Calender.getInstance();
int year = cal.get(Calender.YEAR);
int month = cal.get(Calendar.MONTH)+1;
int day = cal.get(Calendar.DATE);
int hour = cal.get(Calendar.HOUR);
int minute = cal.get(Calendar.MINUTE);
int s = cal.get(Calendar.SECOND);
System.out.println(year+"-"+month+"-"+day+" "+hour+":"+minute+":"+s);
写到一半,想起Calender有一个将日期前移一天的常量Calendar.DAY_OF_MONTH,宕机重写:
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar now = Calendar.getInstance();
//将日历往前移一天--移动的是month中的天数而不是week中的星期数
now.add(Calendar.DAY_OF_MONTH,-1);
System.out.println(sf.format(now.getTime()));
然后我就没管了,到做完被批斗的时候,面试官问,你用过LocalDateTime吗?完了,没好好学习,在学校里面没咋自己拓展过知识点,一脸蒙笔,然后,果不其然,我GG了,痛定思痛,去了解了下Java8的特性:LocalDate,LocalTime,LocalDateTime,好家伙,给我来阴的是吧:
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(localDateTime.format(formatter));
// 打印昨天的此时此刻
System.out.println(LocalDateTime.now().minusDays(1).format(DateTimeFormatter.ofPattern("y yyy-MM-dd HH:mm:ss")));
- 通过
DateTimeFormatter的ofPattern()方法调整日期格式。 - 通过获取到的时间
format()对格式进行匹配 - 通过
minusDay/plusDays对日期进行加减,此外还有hours,minutes,seconds,years,month等后续方法。
雀氏简洁很多,最关键的是这些方法都是线程安全的,而Date的相关方法与SimpleDateFormat是线程不安全的,所以以后,选择谁懂得都懂,不懂的我也不想多说什么(手动狗头)
本文讲述了作者在面试中遇到的一道关于打印昨天此时此刻时间的题目,最初使用了Calendar和SimpleDateFormat,后来了解到Java 8中的LocalDateTime、LocalDate和DateTimeFormatter,发现其更简洁且线程安全。作者通过实例对比展示了Java 8新特性的优势,并反思了自己在学习中的不足。
488

被折叠的 条评论
为什么被折叠?



