Преобразование строки даты в объект DateTime с использованием библиотеки Joda Time - PullRequest
232 голосов
/ 06 июня 2011

У меня есть дата в виде строки в следующем формате "04/02/2011 20:27:05". Я использую библиотеку Joda-Time и хотел бы преобразовать ее в DateTime объект. Я сделал:

DateTime dt = new DateTime("04/02/2011 20:27:05")

Но я получаю следующую ошибку:

Invalid format: "04/02/2011 14:42:17" is malformed at "/02/2011 14:42:17"

Как преобразовать указанную дату в DateTime объект?

Ответы [ 10 ]

450 голосов
/ 06 июня 2011

Использование DateTimeFormat:

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime dt = formatter.parseDateTime(string);
62 голосов
/ 16 декабря 2013

Я знаю, что это старый вопрос, но я хотел добавить, что в JodaTime 2.0 вы можете сделать это с помощью одной строки:

DateTime date = DateTime.parse("04/02/2011 20:27:05", 
                  DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"));
20 голосов
/ 06 июня 2011
DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss").parseDateTime("04/02/2011 20:27:05");
16 голосов
/ 27 августа 2015

Из комментариев я выбрал ответ, а также добавив TimeZone:

String dateTime = "2015-07-18T13:32:56.971-0400";

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZ")
        .withLocale(Locale.ROOT)
        .withChronology(ISOChronology.getInstanceUTC());

DateTime dt = formatter.parseDateTime(dateTime);
13 голосов
/ 06 июня 2011

Ваш формат не соответствует ожидаемому формату ISO, вам следует попробовать

DateTimeFormatter format = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime time = format.parseDateTime("04/02/2011 20:27:05");
5 голосов
/ 04 апреля 2013

Вы также можете использовать SimpleDateFormat , как в DateTimeFormat

Date startDate = null;
Date endDate = null;
try {
    if (validDateStart!= null) startDate = new SimpleDateFormat("MM/dd/yyyy HH:mm", Locale.ENGLISH).parse(validDateStart + " " + validDateStartTime);
    if (validDateEnd!= null) endDate = new SimpleDateFormat("MM/dd/yyyy HH:mm", Locale.ENGLISH).parse(validDateEnd + " " + validDateEndTime);
} catch (ParseException e) {
    e.printStackTrace();
}
3 голосов
/ 31 декабря 2017

tl; dr

java.time.LocalDateTime.parse( 
    "04/02/2011 20:27:05" , 
    DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" )
)

java.time

Современный подход использует классы java.time, которые вытесняют почтенный Joda-Time проект.

Анализировать как LocalDateTime, поскольку в вашем входе отсутствует индикатор часового пояса или смещения от UTC.

String input = "04/02/2011 20:27:05" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu HH:mm:ss" ) ;
LocalDateTime ldt = LocalDateTime.parse( input , f ) ;

ldt.toString ():2011-02-04T20: 27: 05

Совет. Там, где это возможно, используйте стандартные форматы ISO 8601 при обмене значениями времени и даты в виде текста, а не в формате, представленном здесь.Для удобства разбора / генерации строк классы java.time используют стандартные форматы.


О java.time

В инфраструктуру java.time встроенЯва 8 и позже.Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .

Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .

Где получить классы java.time?

Проект ThreeTen-Extra расширяет Java.время с дополнительными занятиями.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти некоторые полезные классы, такие как Interval, YearWeek, YearQuarter и more .

3 голосов
/ 06 июня 2011

Вам необходим DateTimeFormatter , соответствующий формату, который вы используете. Посмотрите документы, чтобы узнать, как их создать.

С манжеты, думаю, тебе нужно format = DateTimeFormat.forPattern("M/d/y H:m:s")

2 голосов
/ 05 сентября 2014

Простой метод:

public static DateTime transfStringToDateTime(String dateParam, Session session) throws NotesException {
    DateTime dateRetour;
    dateRetour = session.createDateTime(dateParam);                 

    return dateRetour;
}
0 голосов
/ 25 июля 2018

Есть два пути это может быть достигнуто .

DateTimeFormat

DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss").parseDateTime("04/02/2011 20:27:05");

SimpleDateFormat

        String dateValue = "04/02/2011 20:27:05";
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); //  04/02/2011 20:27:05

        Date date = sdf.parse(dateValue); // returns date object
        System.out.println(date); // outputs: Fri Feb 04 20:27:05 IST 2011
...