15

我正在开发一个项目,该项目从IST(印度标准时间)的后端获取日期/时间,如图所示"2013-01-09T19:32:49.103+05:30"。但是,当我使用以下 DateFormat 解析它时

DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

接着解析..

Date date = sdf.parse("2013-01-09T19:32:49.103+05:30");


System.out.println("XYZ ==============>"+date);

它以 GMT 格式显示日期作为输出,即

Wed Jan 09 14:02:49 GMT+00:00 2013.

我已经尝试使用 TimeZone 类作为..

TimeZone timeZone=TimeZone.getTimeZone("IST");
sdf.setTimeZone(timeZone);

但是没有效果。。

我怎样才能得到一个Date具有日期IST格式而不是格林威治标准时间的类对象...

请提供适当的解决方案..

编辑:

这就是代码的样子:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

TimeZone timeZone=TimeZone.getTimeZone("IST");
sdf.setTimeZone(timeZone);

Date date = sdf.parse("2013-01-09T19:32:49.103+05:30");
String formattedDate=sdf.format(date);

System.out.println("XYZ ==============>"+formattedDate);
4

4 回答 4

31

日期没有任何时区。它只是自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数的持有者。采用您用于解析的相同 DateFormat,设置 IST 时区并格式化您的日期,如下例所示

    DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
    Date date = sdf.parse("2013-01-09T19:32:49.103+05:30"); 
    sdf.setTimeZone(TimeZone.getTimeZone("IST"));
    System.out.println(sdf.format(date));

输出

2013-01-09T19:32:49.103+05:30

请注意,XX自 1.7 以来,X 模式用于 ISO 8601 时区 (-08:00)。如果您在 1.6 中尝试Z. 有关格式模式的详细信息,请参阅 SimpleDateFormat API

于 2013-01-14T07:09:46.890 回答
3

我怎样才能得到一个日期类对象,其日期为 IST 格式而不是 GMT...

你不能。Date没有格式时区。它仅表示自 1970 年 1 月 1 日 UTC 午夜的 Unix 纪元以来的毫秒数。相反,始终使用默认时区。Date.toString()

要使用特定格式和时区,请使用DateFormat而不是Date.toString(). 您可以设置时区,DateFormat.setTimeZone()然后将 a 转换DateStringusing DateFormat.format()DateFormat它本身有一些用于创建的工厂方法,或者SimpleDateFormat如果你想指定一个特定的模式,你可以使用。

正如 Abu 所说,Joda Time 一个比内置 API 更好的日期/时间 API,尽管标准库只是格式化日期/时间并没有做坏事。请注意,DateFormat它及其子类通常不是线程安全的。

于 2013-01-14T07:04:03.540 回答
2

您可以简单地通过使用 Calender 类来做到这一点。请检查以下片段:

Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(TimeZone.getTimeZone("GMT"));
calendar.setTimeInMillis(<--time stamp-->);
//calendar.setTime(<--date object of gmt date-->); 
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy 'at' hh:mm a");
sdf.setTimeZone(TimeZone.getDefault());
String result=sdf.format(calendar.getTime()); 
于 2014-08-20T07:46:09.167 回答
2
于 2016-12-06T05:00:20.003 回答