本文共 5158 字,大约阅读时间需要 17 分钟。
目录
一、java.util.Date
public static void main(String[] args){ // 获取当前时间: Date date = new Date(); System.out.println(date.getYear() + 1900); // 必须加上1900 System.out.println(date.getMonth() + 1); // 0~11,必须加上1 System.out.println(date.getDate()); // 1~31,不能加1 // 转换为String: System.out.println(date.toString()); // 转换为GMT时区: System.out.println(date.toGMTString()); // 转换为本地时区: System.out.println(date.toLocaleString()); // 获取指定Date对象的时间戳 System.out.println(date.getTime());}
测试输出:
2019 10 28 Mon Oct 28 15:48:04 CST 2019 28 Oct 2019 07:48:04 GMT 2019-10-28 15:48:04 1572248884000
从上述的测试可以发现:
1.getYear()
返回的年份必须加上1900
2.getMonth()
返回的月份是0
~11
分别表示1~12月,所以要加1
3.getDate()
返回的日期范围是1
~31
,又不能加1
4.Date
不能转换时区,除了toGMTString()
可以按GMT+0:00
输出外,Date
总是以当前计算机系统的默认时区为基础进行输出。
5.Date可以直接通过getTime()方法转化为long型的毫秒值。
二、java.text.SimpleDateFormat
为了精确地控制日期和时间的输出格式,可以使用SimpleDateFormat来对Date进行格式转换。
预定义的格式化字符串如下:
- yyyy:年
- MM:月
- dd: 日
- HH: 小时
- mm: 分钟
- ss: 秒
public static void main(String[] args) { // 获取当前时间: Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.format(date)); Date d = sdf.parse("2019-11-11 20:30:28"); System.out.println(d);}
测试输出:
2019-10-28 15:48:04 1573475428000
从上述的测试可以发现:
1.SimpleDateFormat经常搭配Date一起使用,默认使用
"yyyy-MM-dd HH:mm:ss"的输出格式。
2. SimpleDateFormat的parse方法可以将指定格式的时间串转化为Date对象。
三、java.util.Calendar
public static void main(String[] args){ System.out.println(new Date()); // 获取当前时间: Calendar c = Calendar.getInstance(); int y = c.get(Calendar.YEAR); int m = 1 + c.get(Calendar.MONTH); int d = c.get(Calendar.DAY_OF_MONTH); int w = c.get(Calendar.DAY_OF_WEEK); int hh = c.get(Calendar.HOUR_OF_DAY); int mm = c.get(Calendar.MINUTE); int ss = c.get(Calendar.SECOND); int ms = c.get(Calendar.MILLISECOND); System.out.println(y + "-" + m + "-" + d + " " + w + " " + hh + ":" + mm + ":" + ss + "." + ms);}
测试输出:
Mon Oct 28 16:39:56 CST 2019 2019-10-28 2 16:39:56.666
从上述的测试可以发现:
1.Calendar
获取年月日这些信息变成了get(int field)
2.
返回的年份不必转换
3.
返回的月份仍然要加1
4.
返回的星期要特别注意,1
~7
分别表示周日,周一,……,周六。
5.Calendar
只有一种方式获取,即Calendar.getInstance()
,而且一获取到就是当前时间
如果我们想设置一个特定的日期和时间,就必须先清除所有字段:
public static void main(String[] args){ // 当前时间: Calendar c = Calendar.getInstance(); // 清除所有: c.clear(); // 设置2019年: c.set(Calendar.YEAR, 2019); // 设置10月:注意9表示10月: c.set(Calendar.MONTH, 10 - 1); // 设置28日: c.set(Calendar.DATE, 28); // 设置时间: c.set(Calendar.HOUR_OF_DAY, 17); c.set(Calendar.MINUTE, 30); c.set(Calendar.SECOND, 31); Date d = c.getTime(); System.out.println(d); System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d)); // 2019-10-28 17:30:31}
测试输出:
Mon Oct 28 17:30:31 CST 2019 2019-10-28 17:30:31
从上述的测试可以发现:
1.
利用Calendar.getTime()
可以将一个Calendar
对象转换成Date
对象,然后就可以用SimpleDateFormat
进行格式化了。
四、java.util.TimeZone
public static void main(String[] args) { // 当前时区 TimeZone tzDefault = TimeZone.getDefault(); // GMT+9:00时区 TimeZone tzGMT9 = TimeZone.getTimeZone("GMT+09:00"); // 纽约时区 TimeZone tzNY = TimeZone.getTimeZone("America/New_York"); System.out.println(tzDefault.getID()); // Asia/Shanghai System.out.println(tzGMT9.getID()); // GMT+09:00 System.out.println(tzNY.getID()); // America/New_York}
测试输出:
Asia/Shanghai GMT+09:00 America/New_York
从上述的测试可以发现:
1.
时区的唯一标识是以字符串表示的ID,我们获取指定TimeZone
对象也是以这个ID为参数获取,GMT+09:00
、Asia/Shanghai
都是有效的时区ID。
2.
要列出系统支持的所有ID,请使用TimeZone.getAvailableIDs()
。
对指定时间进行时区转换:
public static void main(String[] args){ // 当前时间,默认系统时区 Calendar c = Calendar.getInstance(); // 清除所有,时区不变 c.clear(); // 设置为北京时区: c.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); // 设置年月日时分秒: c.set(2019, 10 /* 11月 */, 20, 8, 15, 0); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.getTimeZone()); System.out.println(sdf.format(c.getTime())); // 2019-11-20 08:15:00 // 更改时区 sdf.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo")); System.out.println(sdf.getTimeZone()); System.out.println(sdf.format(c.getTime())); // 2019-11-20 09:15:00}
测试输出:
sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null] 2019-11-20 08:15:00 sun.util.calendar.ZoneInfo[id="Asia/Tokyo",offset=32400000,dstSavings=0,useDaylight=false,transitions=10,lastRule=null] 2019-11-20 09:15:00
从上述的测试可以发现:
1.
时区转换是通过设置SimpleDateFormat
的setTimeZone()方法来完成的。
2.Calendar 一般都采用
Calendar.getInstance()来获取实例,默认时区为系统时区;可通过 setTimeZone() 来修改。
Calendar
也可以对日期和时间进行简单的加减:
public static void main(String[] args){ // 当前时间: Calendar c = Calendar.getInstance(); // 清除所有: c.clear(); // 设置年月日时分秒: c.set(2019, 10 /* 11月 */, 20, 8, 15, 0); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.format(c.getTime())); // 2019-11-20 08:15:00 // 加5天并减去2小时: c.add(Calendar.DAY_OF_MONTH, 5); c.add(Calendar.HOUR_OF_DAY, -2); System.out.println(sdf.format(c.getTime())); // 2019-11-25 6:15:00}
测试输出:
2019-11-20 08:15:00 2019-11-25 06:15:00
转载地址:https://blog.csdn.net/WXS_0218/article/details/102782595 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!