#java #scala #datetime #timestamp #jodatime
#java #scala #datetime #временная метка #jodatime
Вопрос:
Я написал следующую функцию в Scala, которая работает:
import java.text.SimpleDateFormat
import java.util.{Calendar, Date}
import java.util.{TimeZone, Date}
val curr_timeFmt = "YYYY_MM_dd_HH_mm_ss"
def curr_time(): String = {
val date = new Date
val currTS = new SimpleDateFormat(curr_timeFmt)
currTS.setTimeZone(TimeZone.getTimeZone("EST"));
currTS.format(date)
}
Я хотел бы сохранить возвращаемое значение из этой функции в виде метки времени в столбце PG типа timestamp.
Кроме того, во время онлайн-исследования я слышал, что классы Java Calendar и Date не являются потокобезопасными и изменяемыми. Верно ли это, если да, то как я могу использовать новое время joda в Java 8?
Любая помощь была бы с благодарностью принята, поскольку я некоторое время искал в Интернете и попробовал несколько вещей, но, похоже, ничего не сработало.
Спасибо
Комментарии:
1.Joda-Time «как я могу использовать новое время joda в Java 8?» предшествует Java 8 и фактически является базовой для нового Java Time API в Java 8. Joda-Time устарел в пользу нового Java Time API.
2. Я рекомендую вам не использовать
SimpleDateFormat
,Date
,TimeZone
иCalendar
. Все эти классы плохо спроектированы и давно устарели, первый, в частности, печально известен своими проблемами. Вместо этого используйтеDateTimeFormatter
,LocalDateTime
ZoneId
иZonedDateTime
, все из java.time, современного Java date and time API .
Ответ №1:
Чтобы получить текущее время в восточном часовом поясе США в этом формате, используя Java 8 Time API:
val fmt = DateTimeFormatter.ofPattern("uuuu_MM_dd_HH_mm_ss")
val time = LocalDateTime.now(ZoneId.of("America/New_York")).format(fmt)
Выводимое значение time
показывает, например
2019_03_18_21_32_22
Ответ №2:
Другой способ использования Joda в scala
import org.joda.time.LocalDateTime
import org.joda.time.format.DateTimeFormat
LocalDateTime.now.toString(DateTimeFormat.forPattern("yyyy_MM_dd_HH_mm_ss"))