Java旧版本时间、日期处理

目录

一、java.util.Date 

二、java.text.SimpleDateFormat

三、java.util.Calendar

四、java.util.TimeZone


一、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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值