最近经常会用到日期类型,数据库啦,SpringBoot啦之类的,现在总结一些这段时间里我对时间类型的使用经验。毕竟我也是个新人,如果哪里有错误,还希望帮忙指出,不甚感激。
————————————————————————————————————
时间类型,我用的最多的还是Java.util.Date类,该类型有一些非常方便的方法。
但是这些方法中有很多都过时了,查了一下,好像是因为Date在一开始就设计的有问题,因此很多方法都不推荐使用,而且还出了一些新的替代方法。
以上的这些方法中,我用到的最多的无疑就是“Date date = new Date()”(哈哈哈哈),创建出的实例对象就是当前的系统时间,格式为:“Thu Mar 28 10:06:41 CST 2019”,
除此之外,该类还允许传入一个字符串类型的日期(如:"2018-09-25 12:50:36")或一个长整型的毫秒值,将这些参数转化为日期格式。
使用date.getTime()可以获取到date时间的毫秒值,我之前用这个方法实现了一个很有趣的功能。
对于Date的实例,我发现可以将其直接导入数据库,数据库可以主动对其进行格式转换。但是如果手动转换格式,就用得到下面的方法了。
日期格式转换,目前我知道的方法有三种:
Date date = new Date();
1)最愚蠢的办法:获取毫秒值,手动算出年月日,时分秒,然后拼成字符串;
2)使用java.text.SimpleDateFormat类的实例进行类型转换,示例如下:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); // 注意传入的格式
String date2 = sdf.format(date);
3)使用org.apache.commons.lang.time.DateFormatUtils类提供的format方法进行类型转换,该方法是一个静态方法,无需实例即可使用。这个方法非常强大与实用,它能够对多种格式的源数据进行转换,包括但不限于Calendar类型,Date类型,长整型毫秒值,字符串等:
String date2 = DateFormatUtils.format(date, "yyyy-MM-dd hh:mm:ss");
需要注意的是,上面三种方式的返回值都是String类型。
正是因为Date本身的设计缺陷,很多人都推荐使用java.util.Calendar类,这是一个日历类。
该类被abstract修饰,意味着无法通过new来获取一个实例,但是它提供了getInstance()方法获取一个实例。
Calendar cal = Calendar.getInstance();
其格式为:
"java.util.GregorianCalendar[time=1553742156536,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2019,MONTH=2,WEEK_OF_YEAR=13,WEEK_OF_MONTH=5,DAY_OF_MONTH=28,DAY_OF_YEAR=87,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=4,AM_PM=0,HOUR=11,HOUR_OF_DAY=11,MINUTE=2,SECOND=36,MILLISECOND=536,ZONE_OFFSET=28800000,DST_OFFSET=0]
"
这么长的一大串~~
实际读起来会发现它类似于键值对格式,其中包括时,分,秒,毫秒,年,月,日,当前时区和标准时区的偏移量等等。
获取到Calendar实例后,可以通过getTime()(注意和Date.getTime()的区别)获取到一个Date对象,格式为:“Thu Mar 28 11:02:36 CST 2019”。
除此之外,Calendar还提供了一系列的方法用去取代Date的一些过时方法,包括设置时分秒,年月日之类的。
同时,由于Calendar的格式,它还提供了一些更有意思的方法,比如获取当前日期是这一年的第几个星期之类的:
<end>