如何在Android中将日期从GMT时区解析为IST时区,反之亦然

2022-09-03 09:19:53

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

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.getTimeZone("IST");
sdf.setTimeZone(timeZone);

但没有效果..

我怎么能得到一个类对象具有日期格式而不是GMT...DateIST

请提供适当的解决方案。

编辑:

代码是这样的:

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);

答案 1

日期没有任何时区。它只是自 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

请注意,自 1.7 起,X 模式用于 ISO 8601 时区 (-08:00)。如果您使用的是 1.6,请尝试 。请参阅 SimpleDateFormat API 了解格式模式的详细信息XXZ


答案 2

我怎么能得到一个日期类对象具有IST格式的日期而不是GMT...

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

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

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