请打印出昨天的此时此刻,这是我在面试一家公司时的面试题,在看到这道题的那一刻我有点蒙圈,因为我首先想到的是通过实例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
的相关方法与SimpleDateForma
t是线程不安全
的,所以以后,选择谁懂得都懂,不懂的我也不想多说什么(手动狗头)