1

我正在开发一个项目,该项目需要我通过将 Date 值设置为特定的 timezone 来创建它。

我使用了以下代码

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 的引用。

我如何处理此代码以根据时区设置我需要的数据而不在内部更改它?

4

1 回答 1

1

一个问题是您的原始日期字符串:

2013-08-02 11:00:00

不包括时区信息因此,它被解释为 GMT 时间。这意味着,在加尔各答时间显示,它将是

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'.

此代码将输出:

[0.0] 日期:Fri Aug 02 11:00:00 Asia/Calcutta 2013

[0.0] 简单日期格式:2013-08-02 11:00am

如果设备的时区实际设置为加尔各答(加尔各答 +5.5)。

参考

在 Stack Overflow 上查看这个答案
也许这个也是

于 2013-08-05T22:33:06.423 回答