Как преобразовать объект Joda Time DateTime в строку в формате SQL Server? - PullRequest
20 голосов
/ 23 сентября 2010

Я использую библиотеку Joda-Time на Java и храню дату и время в виде объекта org.joda.time.DateTime .

Как я могу надежно преобразовать этот объект DateTime в строку, которая будет правильно проанализирована сервером SQL (включая часовой пояс), чтобы я мог использовать его в операторе INSERT SQL?

Ответы [ 4 ]

43 голосов
/ 20 ноября 2013

Вы можете попробовать этот простой код:

DateTime dt = new DateTime();
DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
String dtStr = fmt.print(dt);
10 голосов
/ 23 сентября 2010

Использование java.sql.Timestamp с PreparedStatement#setTimestamp().

ps.setTimestamp(1, new Timestamp(dateTime.getMillis()));

Обратите внимание, что java.sql.Date хранит только часть даты, а не часть времени.

7 голосов
/ 25 июля 2011

Будьте внимательны, чтобы рассмотреть часовые пояса. Использование новой метки времени () может быть сложным, так как он ожидает время в миллисекундах в GMT.

    DateTime dt = new DateTime(2010, 1, 1, 14, 30, 59, 1, DateTimeZone.forOffsetHoursMinutes(7, 0));
    Timestamp ts = new Timestamp(dt.getMillis());
    System.out.println(dt); // prints 2010-01-01T14:30:59.001+07:00
    System.out.println(ts); // prints 2010-01-01 08:30:59.001

    DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
    String sqlTimeString = fmt.print(dt);
    System.out.println(sqlTimeString); // prints 2010-01-01 14:30:59
3 голосов
/ 22 января 2014

Простая функция

Я использую эту простую функцию для получения удобного для SQL формата даты из JodaTime DateTime объекта:

// Converts a DateTime object into a SQL-format friendly string.
//
// Return format looks like this: 2014-01-22 10:05:34.546
//
public static String toSql(DateTime dateTime) {
    return new Timestamp( dateTime.getMillis() ).toString();
}
...