Java Calendar与TimeZone之间的故事

在Java中想获取当天的日期,于是搜到这样的代码

Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());

很好奇点进去看getInstance()是干什么的,无意中发现还有带TimeZone参数的重载方法,于是乎试一下

TimeZone timeZone = TimeZone.getTimeZone("America/Mexico_City");
Calendar calendar = Calendar.getInstance(timeZone);
System.out.println(calendar.getTime());

然后你会发现,打印的时间根本没变化,标准的北京时间,而不是所设置的America,咋回事啊?

其实无论设置怎样的时区,calendar拿到的时间(用毫秒表示的那个long类型数字)其实都是一样的,只不过在将这个数字转换成小时、分钟的时候,会用到默认时区去进行转换,而上述代码并没有修改默认的时区,正确代码如下:

TimeZone timeZone = TimeZone.getTimeZone("America/Mexico_City");
TimeZone.setDefault(timeZone); //多了这一行
Calendar calendar = Calendar.getInstance(timeZone);
System.out.println(calendar.getTime());

好了,这样就能打印出America时区现在的时间了,另日期格式化的类 SimpleDateFormat 也记录一下

TimeZone timeZone = TimeZone.getTimeZone("America/Mexico_City");
TimeZone.setDefault(timeZone);
Calendar calendar = Calendar.getInstance(timeZone);

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddhh:mm:ss",Locale.Locale.CHINA);
System.out.println(dateFormat.format(calendar.getTime()));

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值