Java旧版本时间、日期处理
发布日期:2021-11-04 11:54:25 浏览次数:0 分类:技术文章

目录


一、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:00Asia/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

 

上一篇:Java8新版本时间、日期处理
下一篇:Java的动态代理