我正在处理一个项目,该项目要求我通过将日期值设置为特定时区来创建日期值。
我使用了以下代码
Date formatter1 = new Date(HttpDateParser.parse("2013-08-02 11:00:00"));
System.out.println("Date dd formatter1"+formatter1);
结果如下:
Fri Aug 02 16:30:00 Asia/Calcutta 2013
解析后,它会根据设备时区给我时间。。。如果设备时区设置为印度-加尔各答,则自动添加5:30。
我希望结果为:
Fri Aug 02 11:00:00 Asia/Calcutta 2013
我的意思是,它不应该添加偏移量作为GMT的参考。
我如何处理此代码以根据时区设置所需的数据,而不在内部更改它?
一个问题是您的原始日期字符串:
2013-08-02 11:00:00
是否不包括时区信息。因此,它被解释为格林尼治标准时间。这意味着,在加尔各答时间显示,它将是
Fri Aug 02 16:30:00 Asia/Calcutta 2013
您要指定11:00
在加尔各答时间已。要做到这一点,请使用HttpDateParser文档中定义的格式之一:
// we make sure to specify time zone information "+05:30"!
long timeSinceEpoch = HttpDateParser.parse("2013-08-02T11:00:00+05:30");
Date date = new Date(timeSinceEpoch);
System.out.println("Date: " + date);
// use this to slightly change the date formatting ... same time zone
String pattern = "yyyy-MM-dd hh:mma";
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
String formattedDate = formatter.formatLocal(timeSinceEpoch);
System.out.println("SimpleDateFormat: " + formattedDate);
注意:除了将"+5:30"
添加到时间字符串之外,还必须将日期后的空格替换为'T'
。
此代码将输出:
[00]日期:2013年8月2日星期五11:00:00亚洲/加尔各答
[0.0]SimpleDateFormat:2013-08-02上午11:00
如果设备的时区实际上设置为加尔各答(加尔各答+5.5)。
参考文献
请看一下Stack Overflow上的答案
也许这个也是。