SimpleDateFormat игнорируя месяц при разборе - PullRequest
18 голосов
/ 16 июня 2010

Следующий код дает мне проанализированную дату как «Ср 13 января 00:00:00 EST 2010» вместо «Ср 13 июня 00:00:00 EST 2010».Любые идеи высоко ценится.

    SimpleDateFormat sf = new SimpleDateFormat("yyyy-mm-dd'T'HH:mm:ss");

    String str = "2010-06-13T00:00:00";

    Date date = sf.parse(str);

    System.out.println(" Date " + date.toString());

Ответы [ 4 ]

51 голосов
/ 16 июня 2010

Попробуйте:

"yyyy-MM-dd'T'HH:mm:ss"

MM означает месяц.mm означает минуты.См. Документацию для SimpleDateFormat для получения дополнительной информации о поддерживаемых шаблонах даты и времени.

4 голосов
/ 01 марта 2016

Проблема в том, что вы используете «мм» в качестве месяца, а «мм» представляет минуты.Ниже представлены все форматы дат, подробнее doc здесь .

Symbol  Meaning                Kind         Example
D       day in year             Number        189
E       day of week             Text          E/EE/EEE:Tue, EEEE:Tuesday, EEEEE:T
F       day of week in month    Number        2 (2nd Wed in July)
G       era designator          Text          AD
H       hour in day (0-23)      Number        0
K       hour in am/pm (0-11)    Number        0
L       stand-alone month       Text          L:1 LL:01 LLL:Jan LLLL:January LLLLL:J
M       month in year           Text          M:1 MM:01 MMM:Jan MMMM:January MMMMM:J
S       fractional seconds      Number        978
W       week in month           Number        2
Z       time zone (RFC 822)     Time Zone     Z/ZZ/ZZZ:-0800 ZZZZ:GMT-08:00 ZZZZZ:-08:00
a       am/pm marker            Text          PM
c       stand-alone day of week Text          c/cc/ccc:Tue, cccc:Tuesday, ccccc:T
d       day in month            Number        10
h       hour in am/pm (1-12)    Number        12
k       hour in day (1-24)      Number        24
m       minute in hour          Number        30
s       second in minute        Number        55
w       week in year            Number        27
G       era designator          Text          AD
y       year                    Number        yy:10 y/yyy/yyyy:2010
z       time zone               Time Zone     z/zz/zzz:PST zzzz:Pacific Standard 
1 голос
/ 29 апреля 2018

Современный ответ:

    String str = "2010-06-13T00:00:00";
    LocalDateTime dateTime = LocalDateTime.parse(str);
    System.out.println("Date-time " + dateTime);

Вывод:

Дата и время 2010-06-13T00: 00

Я использую и рекомендуюjava.time, современный Java API даты и времени.Нам даже не нужен явный форматер для разбора.Это потому, что ваша строка имеет формат ISO 8601, международный стандарт, который классы java.time анализируют как значения по умолчанию.java.time вышел в 2014 году.

В то время как в 2010 году, когда был задан этот вопрос, SimpleDateFormat был тем, что у нас было для разбора дат и времени, этот класс теперь считается давно устаревшим, к счастью, потому что он такжехлопотно.

Если ваша строка содержала только дату без времени суток, используйте класс LocalDate совершенно таким же образом (об этом был задан в дублирующий вопрос ).

    String dateStr = "2018-05-23";
    LocalDate date2 = LocalDate.parse(dateStr);
    System.out.println(date2);

2018-05-23

Ссылка: Обучающая программа Oracle: Дата Время Объяснениекак пользоваться java.time.

0 голосов
/ 06 июля 2016

Пример, если Дата 06 06 2016

SimpleDateFormat sdf= new SimpleDateFormat("dd MM yyyy");

Вы можете использовать запятую, точку, косую черту или дефис между этими форматами.

 Ex: dd-mm-yyyy, it will display like(06-07-2016)
 dd/mm/yyyy,it will display like(06/07/2016)
 dd.mm.yyyy,it will display like(06.07.2016)
 dd,mm,yyyy ,it will display like(06,07,2016)

 MM   - will display number of the Month.
 MMM  - will display Month Three character only(Ex: Jul)
 MMMM - will display full month(Ex: July)

 yyyy - will display full year(2016) 
 yy   - will display last two digits(16)

 hh - will display hours
 mm -will display minutes
 ss - will display seconds
 a - will display AM or PM

 Ex: if time is 12:09:10 PM means (hh:mm:ss a)

 EEE- will display short week name(Ex: Wed)
 EEEE- will display full week name(Ex: Wednesday)
...