Как получить текущее время в Scala в формате timestamp / datetime, чтобы его можно было сохранить в таблице PG

#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"))