java 夏令时区_java中的夏令时

是的,您应该在

Java 8中使用

Joda-Time或新的java.time包(受Joda-Time启发).

偏移量是从特定日期时间值表示的UTC(GMT)的小时数和分钟数.西海岸是-08:00(忽略夏令时废话),意味着比UTC晚8小时.

请注意,java.time在其初始版本中有一个小错误,它无法处理几分钟(例如08)的偏移而没有分钟(例如08:00).

A time zone是关于夏令时(DST)的偏移加规则,DST更改历史以及有关其他异常的信息.

使用适当的time zone names(主要是大陆斜线城市).避免使用3或4个字母代码,例如EST,它们既不是标准的也不是唯一的.

java.util.Date没有时区,而Joda-Time DateTime则没有.

要获取Web浏览器的时区,请参阅this question.但通常,这不起作用.正如您可能已经看到的,许多网站要求用户选择时区.

您确切的用例令人困惑.通常,最好的方法是使用UTC的日期时间值,然后根据需要调整用户的本地时间.通常最适合您的软件工作和存储日期时间为UTC.然后显示调整为适合用户的本地日期时间.换句话说,全局思考(UTC),在本地呈现(调整本地时区).

通常,系统管理员将其服务器计算机设置为UTC(无时区偏移).如果您的操作系统(如Mac OS X)不提供UTC,则使用Reykjavik,因为冰岛全年使用UTC而没有任何夏令时.同样,数据库引擎几乎总是将日期时间值转换为UTC以进行存储.

当您真正不关心时区或时间时,Joda-Time会提供LocalDate类.但通常最好使用日期时间(DateTime实例),并根据需要格式化仅限日期的字符串.

Joda-Time 2.3中的示例代码.

DateTimeZone timeZoneChina = DateTimeZone.forID( "Asia/Shanghai" );

DateTime dateTimeChina = new DateTime( 2013, 8, 29, 17, 45, 00, timeZoneChina );

DateTime dateTimeUtc = dateTimeChina.withZone( DateTimeZone.UTC );

DateTime dateTimeParis = dateTimeChina.withZone( DateTimeZone.forID( "Europe/Paris" ) );

DateTimeZone timeZoneUsWestCoast = DateTimeZone.forID( "America/Los_Angeles" );

DateTime dateTimeUnitedStatesWestCoast = dateTimeChina.withZone( timeZoneUsWestCoast );

DateTimeFormatter formatter = ISODateTimeFormat.date();

String outputDateOnlyForUnitedStatesWestCoast = formatter.withZone( timeZoneUsWestCoast ).print( dateTimeUtc );

转储到控制台……

System.out.println( "dateTimeChina: " + dateTimeChina );

System.out.println( "dateTimeUtc: " + dateTimeUtc );

System.out.println( "dateTimeParis: " + dateTimeParis );

System.out.println( "dateTimeUnitedStatesWestCoast: " + dateTimeUnitedStatesWestCoast );

System.out.println( "outputDateOnlyForUnitedStatesWestCoast: " + outputDateOnlyForUnitedStatesWestCoast );

跑的时候……

dateTimeChina: 2013-08-29T17:45:00.000+08:00

dateTimeUtc: 2013-08-29T09:45:00.000Z

dateTimeParis: 2013-08-29T11:45:00.000+02:00

dateTimeUnitedStatesWestCoast: 2013-08-29T02:45:00.000-07:00

outputDateOnlyForUnitedStatesWestCoast: 2013-08-29

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值