java什么时候 中国_java获取中国时间代码(适用全球任意机器)

这个问题出自我写的代码需要运行在服务器上。本来的代码是这样写的:

import java.text.*;

import java.util.*;

public final class NowDateTime

{

public static final String get()

{

Calendar cal = Calendar.getInstance();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String cdate = df.format(cal.getTime());

return cdate;

}

public static void main(String[] args)

{

System.out.println(get());

}

}

乍看之下没有问题,确实,在我自己的电脑上获取的确实是当前的时间,本人在中国,要的也是中国时间,这一点在这篇文章中很重要。

但是奇怪的,明明格式中写了“HH”,也就是要求24小时制的时间,可是每一次把程序上传到服务器之后,运行的到的程序都是12小时制的,奇了怪了。由于服务器是ubuntu的,开始的时候,我以为是ubuntu的jvm和windows的jvm对相同的代码有不同的行为,虽然java本身以跨平台为特色,但是有那么一两个bug也是可以接受的嘛~~

结果有一天……我仔细看了一下java的文档,虽然文档没有直接说明我的困惑,但是一个方法却让我发现了端倪,那是DateFormat.setTimeZone方法。是的!是时区,服务器再美国,所以在服务器上获取的时间,是美国时间相差12个小时。虽然以前就知道,但是没想到真的如此接近,只相差几分钟,这几分钟被习以为常地用误差解释了。实际上,阴差阳错的是,我次测试都是在下午,中国时间>12,美国时间<12,就造成了一个24小时制,一个是12小时制的假象,所以根本没有注意到时区的问题。知道什么问题之后我改写了代码,明确说明要中国的时区——"Asia/Chongqing"(即“亚洲/重庆”)或"Asia/shanghai"。

所以更改之后的代码如下:

import java.text.*;

import java.util.*;

// 获取当前日期时间的静态方法

public final class NowDateTime

{

public static final String get()

{

Calendar cal = Calendar.getInstance();

// 设置格式化的SimpleDateFormat对象,指定中国语言环境

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);

// 创建时区(TimeZone)对象,设置时区为“亚洲/重庆"

TimeZone TZ = TimeZone.getTimeZone("Asia/Chongqing");

// 将SimpleDateFormat强制转换为DateFormat

DateFormat df = null;

try

{

df = (DateFormat)sdf;

}

catch(Exception E)

{

E.printStackTrace();

}

// 为DateFormat对象设置时区

df.setTimeZone(TZ);

// 获取时间表达式

String cdate = df.format(cal.getTime());

return cdate;

}

public static void main(String[] args)

{

System.out.println(get());

}

} 这样在任何国家和地区,任何支持java SE的机器上,都能直接拿到中国时间了(如果java跨平台特性真的是完善的话)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值