Вопрос-ответ

SimpleDateFormat ignoring month when parsing

SimpleDateFormat игнорирует месяц при синтаксическом анализе

Следующий код выдает мне проанализированную дату как "Ср. 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());
Переведено автоматически
Ответ 1

Попробуйте:

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

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

Ответ 2

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

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
Ответ 3

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

    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 date and time API. Нам даже не нужен явный форматировщик для синтаксического анализа. Это потому, что ваша строка находится в формате ISO 8601, международном стандарте, который java.time классы анализируют по умолчанию. java.time вышел в 2014 году.

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

In case your string contained only a date without time of day, use the LocalDate class in quite the same manner (this was asked in a duplicate question).

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

2018-05-23


Link: Oracle tutorial: Date Time explaining how to use java.time.

Ответ 4

Example if Date is 06 07 2016

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

you can use comma, full-stop, slash, or hyphen between these format.

 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)
java