如何使用js-joda将任何ISO8601字符串转换为LocalTime?

时间:2017-06-24 08:31:29

标签: javascript jodatime js-joda

我有一个完整的ISO8601字符串,如下所示:1989-08-16T00:00:00.000Z。如何使用LocalDate库从中创建js-joda的实例?

尝试使用LocalDate.parse()直接解析时,我收到以下错误:

DateTimeParseException: Text '1989-08-16T00:00:00.000Z' could not be parsed,
unparsed text found at index 10…

我知道我可以轻松地将字符串拆分为T个字符,或者用香草Date解析它,然后从中创建LocalDate,但是有一个更简单的方法,我可以用于轻松地将任何 ISO8601兼容字符串解析为LocalDate

2 个答案:

答案 0 :(得分:1)

首先将您的日期转换为Js Date对象,然后转换为LocalDate对象。

Date.parse将ISO字符串转换为毫秒,然后将其转换为JS日期。最终使用JS Date对象获取LocalDate对象。

var jsDate = new Date(Date.parse('1989-08-16T00:00:00.000Z')); //Iso Date string
var LocalDateObj = LocalDate.of(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate());

答案 1 :(得分:1)

ISO字符串' 1989-08-16T00:00:00.000Z'表示UTC时间戳。

您可以使用相应的js-joda域Instant对其进行解析,然后将其转换为LocalDate。例如

let utcTimestamp = Instant.parse('1989-08-16T00:00:00.000Z')
let date = LocalDate.ofInstant(utcTimestamp)