2015-03-02 3 views
0

Я пытаюсь создать joda LocalDate в формате yyyyMMdd, но каждый раз, когда я разбираю его для создания объекта, он вставляет дефисы как yyyy-MM-dd без видимых причин.Joda DateTimeFormat без разделителя?

DateTimeFormatter format = DateTimeFormat.forPattern("yyyyMMdd"); 
LocalDate d = format.parseLocalDate("20150101"); 

Есть ли способ, чтобы получить это в конечном итоге выглядит как 20150101, или это навсегда 2015-01-01?

+1

Вы используете 'formatter' для' print' даты также? – vikingsteve

+0

@vikingsteve Я не печатаю его, он просто делает это автоматически при проверке тестовых случаев. – fiveandten

+0

Хорошо, хорошо, когда вы сравниваете его со строкой в ​​тестовом случае, вам нужно знать или указать свой собственный формат. – vikingsteve

ответ

1

решение не использовать toString() -метод:

DateTimeFormatter format = DateTimeFormat.forPattern("yyyyMMdd"); 
LocalDate d = format.parseLocalDate("20150101"); 
System.out.println(format.print(d)); // 20150101 
System.out.println(d); // using toString(): 2015-01-01 

Довольно просто, не так ли? Для меня форма, использующая дефисы, более читаема, поэтому это естественный выбор для стандартного вывода метода toString().

К слову: оба варианта являются действительными строками ISO-8601. Форма без дефиса называется BASIC DATE, а форма с дефисами называется EXTENDED DATE.

+0

Спасибо за точное название форматов. Однако я не использую toString. Проблема возникает только с тестовыми примерами, когда она скажет что-то вроде «2015-01-01, не равное 20150101», поэтому я предположил, что он выполнял форматирование по умолчанию при проверке тестовых случаев. – fiveandten

+0

@fiveandten Можете ли вы показать свои тестовые примеры (с кодом), где вы наблюдаете отклонения? –

Смежные вопросы