Java 从ISO日期时间字符串构造本地化的日期字符串
我有一个要求,我需要在Android布局的文本视图上呈现本地化的datetime。日期时间以ISO格式从服务调用返回。下面是JSON的响应Java 从ISO日期时间字符串构造本地化的日期字符串,java,android,datetime-format,Java,Android,Datetime Format,我有一个要求,我需要在Android布局的文本视图上呈现本地化的datetime。日期时间以ISO格式从服务调用返回。下面是JSON的响应 { "expiredTime": "2020-01-24T00:59:59.000-05:00", . . . Other Keys and Values . . . } 这将在文本视图中的Android应用程序中呈现。我想做的是在应用程序上显示本地化时间。因此,如果用户在屏幕上查看(比如纽约),过期时间将显示2020-01-24T00:59:5
{
"expiredTime": "2020-01-24T00:59:59.000-05:00",
. . . Other Keys and Values . . .
}
这将在文本视图中的Android应用程序中呈现。我想做的是在应用程序上显示本地化时间。因此,如果用户在屏幕上查看(比如纽约),过期时间将显示2020-01-24T00:59:59.000-05:00
,因为有效负载中的时间与纽约属于同一时区。类似地,如果我想以GMT显示,时间将显示为2020-01-24T05:59:59.000-00:00
我如何在Android中正确实现这一点?我这样做如下所示。返回的日期被传递到simpleDataFormat
实例以返回字符串
public static final Date parse(String dateTimeAsString) throws ParseException
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME.withLocale(Locale.getDefault()));
try
{
LocalDate localDate = LocalDate.parse(value, formatter);
if (localDate != null)
return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
} catch (DateTimeParseException dtpe)
{
// If the format is invalid, then delegate to the other helper function.
}
}
return null;
}
我的问题如下:
String expiredTime = "2020-01-24T00:59:59.000-05:00";
System.out.println(parse(expiredTime));
我的时区中的输出:
2020-01-24T06:59:59+01:00[欧洲/哥本哈根]
关于您的问题:
- 返回
不会给出任何特定时区的时间。日期
没有时区。这只是一个时间点日期
- 一个
是一个没有时间的日期,所以当使用这个类时,你会丢失时间部分LocalDate
- 不重要的是,
在所有区域设置中都是相同的,因此对其应用区域设置没有任何区别DateTimeFormatter.ISO\u DATE\u TIME
- ,其中首先描述了
java.time
- ,java.time的后端口到Java6和Java7(JSR-310为三十)
- ,Android版Three Ten Backport
- ,解释得非常透彻
- 关于维基百科
2020-01-24T06:59:59.000+01:00
还是类似于2020年1月24日
?@OleV.V。基本上在本地时区以长日期格式显示日期。例如,在美国显示为MM-DD-YY hh:MM:ss Z,但在欧洲显示为DD-MM-YY hh:MM:ss Z。我认为您可以从以下问题中获得一些信息:。仅因为UTC偏移量-05:00
中有冒号,所以不需要格式化程序,因为您的格式是OffsetDateTime
的默认格式。使用OffsetDateTime.parse(“2020-01-24T00:59:59.000-05:00”)进行解析应该可以。你也可以搜索更有用的问题。
String expiredTime = "2020-01-24T00:59:59.000-05:00";
System.out.println(parse(expiredTime));