gpt4 book ai didi

java - 如何将日期时间字符串转换为 "yyyy-MM-dd' T'HH :mm:ss. SSSSSSSSSZ"

转载 作者:行者123 更新时间:2023-12-02 08:39:18 25 4
gpt4 key购买 nike

我创建了以下函数

def toUTCDate(dateString: String): Option[String] = {
val parser = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss")
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSSZ")

Try {
ZonedDateTime.parse(dateString, parser)
}.toOption
.map(_.format(formatter))
}

上面代码的问题是它期望输入有一些时区,但我的输入是日期时间字符串。

Sample input : "13/02/2017 16:05:45"
Expected output: "2017-02-13T16:05:45.000000000+01:00

最佳答案

正如您所说,您的问题是您正在使用 ZonedDateTime 但您的字符串没有时区。

您可以通过导入 ZoneId 在解析器构造中应用默认时区。

我在下面的示例中使用了 UTC,但您可以使用 GMT+1 或您想要的任何区域

import java.time.ZoneId
val parser = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss").withZone(ZoneId.of("UTC"))
parser: java.time.format.DateTimeFormatter = Value(DayOfMonth,2)'/'Value(MonthOfYear,2)'/'Value(YearOfEra,4,19,EXCEEDS_PAD)' 'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2)

scala> ZonedDateTime.parse(input, parser)
res12: java.time.ZonedDateTime = 2017-02-13T16:05:45Z[UTC]

scala> ZonedDateTime.parse(input, parser).format(formatter)
res13: String = 2017-02-13T16:05:45.000000000+0000

您可以通过ZoneId.getAvailableZoneIds方法获取可用的ZonesId

ZoneId.getAvailableZoneIds
res14: java.util.Set[String] = [Asia/Aden, America/Cuiaba, Etc/GMT+9, Etc/GMT+8, Africa/Nairobi, America/Marigot, Asia/Aqtau, Pacific/Kwajalein, America/El_Salvador, Asia/Pontianak, Africa/Cairo, Pacific/Pago_Pago, Africa/Mbabane, Asia/Kuching, Pacific/Honolulu, Pacific/Rarotonga, America/Guatemala, Australia/Hobart, Europe/London, America/Belize, America/Panama, Asia/Chungking, America/Managua, America/Indiana/Petersburg, Asia/Yerevan, Europe/Brussels, GMT, Europe/Warsaw, America/Chicago, Asia/Kashgar, Chile/Continental, Pacific/Yap, CET, Etc/GMT-1, Etc/GMT-0, Europe/Jersey, America/Tegucigalpa, Etc/GMT-5, Europe/Istanbul, America/Eirunepe, Etc/GMT-4, America/Miquelon, Etc/GMT-3, Europe/Luxembourg, Etc/GMT-2, Etc/GMT-9, America/Argentina/Catamarca, Etc/GMT-8, Etc/GMT-7, Etc/GMT-6, Euro...

因此您的代码将如下所示:

def toUTCDate(dateString: String): Option[String] = {
val parser = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss").withZone(ZoneId.of("UTC"))
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSSZ")

Try {
ZonedDateTime.parse(dateString, parser)
}.toOption
.map(_.format(formatter))
}

关于java - 如何将日期时间字符串转换为 "yyyy-MM-dd' T'HH :mm:ss. SSSSSSSSSZ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61484439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com