我有以下代码:
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的时区设置为太平洋时间(PDT为UTC-7),则会打印
Fri Jun 29 08:15:00 PDT 2012
PDT是否落后IST(印度标准时间)12.5小时?任何其他时区都不会出现此问题 - 我在日期字符串中尝试使用UTC,PKT,MMT等代替IST。 Java中有两个IST是否有机会?
P.S:实际代码中的日期字符串来自外部源,因此我不能使用GMT偏移或任何其他时区格式。
答案 0 :(得分:9)
时区的abberviated名称含糊不清,并因Olson时区名称而被弃用。以下工作始终如一,因为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);
答案 1 :(得分:6)
抱歉,我必须为此写一个答案,但请尝试以下代码:
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在列表中出现过几次,第一次确实是以色列标准时间。
答案 2 :(得分:4)
不是答案,但请参阅下面的输出+代码 - 似乎parse
对IST的处理与TimeZone.getTimeZone("IST")
不同...
Fri Jun 29 16:15:00 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"));
}
答案 3 :(得分:0)
这是因为IST将具有多种含义,例如爱尔兰标准时间,Isreal Standrad时间,印度标准时间。
参考:this
专门使用setTimezone()方法设置时区。
例如:parser.setTimeZone(TimeZone.getTimeZone(“在此处详细指定时区”));