繁体   English   中英

inDaylightTime()问题,并确定日期是否在夏令时

[英]Issue with inDaylightTime() and determing if a date is in daylight savings time

一直在为此打我的头,不确定在这里我在做什么错。

我正在针对特定时区测试inDaylightTime()方法,但是在这种情况下它应返回“ true”时返回“ false”。

import java.util.TimeZone;
import java.util.Date;

public class TimeZoneDemo {
    public static void main( String args[] ){

        Date date = new Date(1380931200); // Sat, 05 Oct 2013, within daylight savings time.

        System.out.println("In daylight saving time: " + TimeZone.getTimeZone("GMT-8:00").inDaylightTime(date));
    }    
}

当看起来结果应该是“ true”时,此代码将继续打印“ false”。

我在这里想念什么? 将不胜感激任何指导。

您指定的是GMT-8:00时区-这是一个固定时区,比UTC 永久晚8个小时。 它不遵守夏令时。

如果您实际上是太平洋时间,则应将America/Los_Angeles指定为时区ID。 请记住,一年中的不同时间会在标准时间和夏令时之间切换不同的时区。

另外, new Date(1380931200)实际上是在1970年1月-您的意思是new Date(1380931200000L) -不要忘记该数字是自Unix纪元以来的毫秒数,而不是seconds

乔恩·斯基特(Jon Skeet)的答案是正确的。

在乔达时代

只是为了好玩,下面是使用Java 7中的第三方库Joda-Time 2.3的源代码解决方案。

细节

DateTimeZone类具有一个方法isStandardOffset 唯一的窍门是该方法需要很长的毫秒数(支持DateTime实例),可以通过调用DateTime类的“超类”( BaseDateTime )方法getMillis进行访问

示例源代码

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.

org.joda.time.DateTimeZone losAngelesTimeZone = org.joda.time.DateTimeZone.forID("America/Los_Angeles");
org.joda.time.DateTime theSecondAt6PM = new org.joda.time.DateTime( 2013, 11, 2, 18, 0, losAngelesTimeZone ) ;
org.joda.time.DateTime theThirdAt6PM = new org.joda.time.DateTime( 2013, 11, 3, 18, 0, losAngelesTimeZone ) ; // Day when DST ends.

System.out.println("This datetime 'theSecondAt6PM': " + theSecondAt6PM + " is in DST: " + losAngelesTimeZone.isStandardOffset(theSecondAt6PM.getMillis()));
System.out.println("This datetime 'theThirdAt6PM': " + theThirdAt6PM + " is in DST: " + losAngelesTimeZone.isStandardOffset(theThirdAt6PM.getMillis()));

运行时,请注意与UTC的偏移量差异(-7与-8)…

This datetime 'theSecondAt6PM': 2013-11-02T18:00:00.000-07:00 is in DST: false
This datetime 'theThirdAt6PM': 2013-11-03T18:00:00.000-08:00 is in DST: true

关于乔达时报

// Joda-Time - The popular alternative to Sun/Oracle's notoriously bad date, time, and calendar classes bundled with Java 7 and earlier.
// http://www.joda.org/joda-time/

// Joda-Time will become outmoded by the JSR 310 Date and Time API introduced in Java 8.
// JSR 310 was inspired by Joda-Time but is not directly based on it.
// http://jcp.org/en/jsr/detail?id=310

// By default, Joda-Time produces strings in the standard ISO 8601 format.
// https://en.wikipedia.org/wiki/ISO_8601

// About Daylight Saving Time (DST): https://en.wikipedia.org/wiki/Daylight_saving_time

// Time Zone list: http://joda-time.sourceforge.net/timezones.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM