与IST的奇怪行为?

我有以下代码:

DateFormat df = new SimpleDateFormat("M/d/yy h:mm a z");
df.setLenient(false);
System.out.println(df.parse("6/29/2012 5:15 PM IST"));

假设我现在将我的PC的时区设置为太平洋时间(UTC-7 for PDT),打印出来

星期五6月29日08:15:00 PDT 2012

印度标准时间(印度标准时间)之后12.5小时是不是PDT? 这个问题不会发生在任何其他时区 - 我在日期字符串中尝试了UTC,PKT,MMT等而不是IST。 Java中有两个IST有可能吗?

PS:实际代码中的日期字符串来自外部来源,所以我不能使用GMT偏移量或任何其他时区格式。


对不起,我必须为此写一个答案,但请尝试下面的代码:

public class Test {

    public static void main(String[] args) throws ParseException {
        DF df = new DF("M/d/yy h:mm a z");
        String [][] zs = df.getDateFormatSymbols().getZoneStrings();
        for( String [] z : zs ) {
            System.out.println( Arrays.toString( z ) );
        }
    }

    private static class DF extends SimpleDateFormat {
        @Override
        public DateFormatSymbols getDateFormatSymbols() {
            return super.getDateFormatSymbols();
        }

        public DF(String pattern) {
            super(pattern);
        }
    }

}

你会发现IST出现在列表中几次,第一次确实是以色列标准时间。


时区的精心设计的名称是不明确的,并且因时区的奥尔森名称而被弃用。 以下工作一致,因为parse()和getTimezone()的行为方式可能有所不同。

SimpleDateFormat sdf = new SimpleDateFormat("M/d/yy h:mm a Z");
TimeZone istTimeZone = TimeZone.getTimeZone("Asia/Kolkata");
Date d = new Date();
sdf.setTimeZone(istTimeZone);
String strtime = sdf.format(d);

不是一个答案,但看到下面的输出+代码 - 它似乎parse对待IST与TimeZone.getTimeZone("IST") ...

星期五6月29日16:15 BST 2012
星期五6月29日12:45:00 BST 2012
星期五6月29日12:45:00 BST 2012
* BST =伦敦

public static void main(String[] args) throws InterruptedException, ParseException {
    DateFormat fmt1 = new SimpleDateFormat("M/d/yy h:mm a Z");
    Date date = fmt1.parse("6/29/2012 5:15 PM IST");
    System.out.println(date);

    DateFormat fmt2 = new SimpleDateFormat("M/d/yy h:mm a");
    fmt2.setTimeZone(TimeZone.getTimeZone("IST"));
    System.out.println(fmt2.parse("6/29/2012 5:15 PM"));

    DateFormat fmt3 = new SimpleDateFormat("M/d/yy h:mm a");
    fmt3.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
    System.out.println(fmt3.parse("6/29/2012 5:15 PM"));
}
链接地址: http://www.djcxy.com/p/3065.html

上一篇: strange behavior with IST?

下一篇: Rounding PHP timestamp