繁体   English   中英

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

[英]How do i convert Datetime string to “yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSSZ”

我创建了以下 function

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

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

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

正如您所说,您的问题是您使用的是ZonedDateTime但您的 String 没有时区。

您可以通过导入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))
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM