Android 日期解析。如何解析此日期格式?

Android 日期解析。如何解析此日期格式?,android,date,date-parsing,Android,Date,Date Parsing,如何解析此日期格式: “/日期(151472880000+0300)/” 我不知道这个数字是什么意思,也不知道+符号是什么意思。部分答案:这个数字就是这个数字 这是自1970年1月1日UTC以来的秒数。 您可以将此值传递给的构造函数,该构造函数将为您获得具有正确值的Date对象 +0300不清楚,可能是对不同时区的引用。我不确定+0300,但您可以使用以下功能将历元时间转换为日期: Date date = new Date(Long.parseLong(myDateToParse.replac

如何解析此日期格式:

“/日期(151472880000+0300)/”


我不知道这个数字是什么意思,也不知道
+
符号是什么意思。

部分答案:这个数字就是这个数字

这是自1970年1月1日UTC以来的秒数。
您可以将此值传递给的构造函数,该构造函数将为您获得具有正确值的
Date
对象


+0300不清楚,可能是对不同时区的引用。

我不确定+0300,但您可以使用以下功能将历元时间转换为日期:

 Date date = new Date(Long.parseLong(myDateToParse.replaceAll("[^\\d-]", "")));
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss", Locale.DEFAULT);

假设您有unixtimestamp_zoneoffset,下面是解析这个的代码


返回的值是2017-12-31T17:00+03:00

从何处获取这些值?从我无权访问且无法更改的web服务第一部分(151472880000)是a-自unix纪元以来的毫秒数(
1970-01-01T00:00Z
)。第二部分(
+0300
)是一个,它表示与UTC的差异(在本例中,比UTC提前3小时)。但是解析的结果应该是什么呢?A
java.util.Date
?还有其他对象吗?@Hugo在Unix时间戳中添加UTC偏移量对我来说似乎很奇怪。我认为Unix时间戳的目的之一是避免时区的麻烦。(并不是说你错了,事实上你可能是对的。这似乎是有问题的web服务做出的一个奇怪的决定。)@s.L.Barth我也认为这很奇怪,但我猜你可以将时间戳转换为指定的偏移量,这样你就可以得到一个特定的日期和时间(因为相同的时间戳对应于每个时区中不同的日期和时间)。但我仍然认为它不是最聪明的格式…这将创建一个
long
值,该值等于
1514728800000000300
,但最后的数字(
0300
)不是毫秒值的一部分,它不应该传递给
Date
构造函数(您的代码在481968年创建了一个日期!)-您应该只传递
151472880000
。和
Locale.DEFAULT
不存在,也许您的意思是
Locale.getDefault()
?@Hugo-True,我指的是Locale.getDefault(),谢谢你的输入。至于+0300,我也必须说你是对的。在我的例子中,我试图做的是解析一个简单的纪元时间(没有+0300)。你只需简单地删除+0300并将3个小时(具有所需的逻辑)添加到新的DateWell,如果你愿意,你可以随时修改/改进你的答案。
String inputStr = "1514728800000+0300";
String[] splitStr = inputStr.split("[+-]");
String offsetSign = inputStr.indexOf("+")>0 ? "+" : "-";
ZonedDateTime captureTime = Instant.ofEpochMilli(Long.valueOf(splitStr[0])).atZone(ZoneOffset.of(offsetSign+splitStr[1]));