与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