Как вы сказали, ваша проблема в том, что вы используете ZonedDateTime
, но ваша строка не имеет часового пояса.
Вы можете применить часовой пояс по умолчанию в конструкции анализатора, импортировав ZoneId
.
Я использовал UT C в приведенном ниже примере, но вы можете использовать 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
Вы можете получить доступный ZonesId с помощью метода ZoneId.getAvailableZoneIds.
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))
}