2013-03-15 4 views
1

Мне нужна java.sql.Timestamp, но когда я пытаюсь преобразовать из LocalDateTime, это терпит неудачу, потому что когда строка ввода была преобразована в LocalDateTime, буква «T» был добавлен, как и в 2013-03-15T00: 00: 00.000. Есть идеи? Или есть лучший способ преобразовать строку в метку времени? Я просто хотел использовать йоду, если в будущем нужно будет манипулировать временем.joda-time-2.2 конвертировать LocalDateTime в java.sql.Timestamp

Спасибо.

+0

Вы используете рамки ORM? Обычно вы явно не конвертируете в тип 'java.sql', но пусть это сделает каркас для вас. – Zutty

ответ

7

Почему вы не можете сделать

LocalDateTime ldt = LocalDateTime.now(); 
Timestamp ts = new Timestamp(ldt.toDate().getTime()); 
+1

Да, это работает, это была несвязанная ошибка в моем коде. :(Также 'Timestamp ts = новая отметка времени (ldt.toDateTime(). GetMillis());' работает также. Любое преимущество одного для другого? – yellavon

+0

Я думаю, что оба они одинаковы –

+0

Я проверил оба способа, чтобы получить тот же результат в миллионы. Среднее состояние ('.toDate()' или 'to.DateTime()' - это просто разные форматы. – yellavon

1

Лучший способ использовать Java 8 раз API:

LocalDateTime ldt = timeStamp.toLocalDateTime(); 
    Timestamp ts = Timestamp.valueOf(dateTime); 

Для использования с JPA положить в вашей модели (https://weblogs.java.net/blog/montanajava/archive/2014/06/17/using-java-8-datetime-classes-jpa):

@Converter(autoApply = true) 
public class LocalDateTimeConverter implements AttributeConverter<LocalDateTime, Timestamp> { 
    @Override 
    public Timestamp convertToDatabaseColumn(LocalDateTime ldt) { 
     return Timestamp.valueOf(ldt); 
    } 

    @Override 
    public LocalDateTime convertToEntityAttribute(Timestamp ts) { 
     return ts.toLocalDateTime(); 
    } 
} 

Так что теперь это относительное время, не зависящее от времени. Кроме того, это легко делать:

LocalDate ld = ldt.toLocalDate(); 
    LocalTime lt = ldt.toLocalTime(); 

Форматирование:

DateTimeFormatter DATE_TME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm") 
String str = ldt.format(DATE_TME_FORMATTER); 
ldt = LocalDateTime.parse(str, DATE_TME_FORMATTER); 
Смежные вопросы