Формат дати повертає неправильну дату

Я намагаюсь відформатувати об'єкт Date і перетворити цей відформатований назад в тип Date
object
Це мій код

SimpleDateFormat inputDf = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss zzz");
System.out.println("before format  "+invoiceDate);
invoiceDate=inputDf.parse(inputDf.format(invoiceDate));
System.out.println("after format "+inputDf.format(invoiceDate));
System.out.println("after parse "+invoiceDate);

Викладене вище з коду є

before format : Mon Jan 14 10:55:40 IST 2013
after format  : Mon Jan 14 2013 10:55:40 IST
after parse   : Mon Jan 14 10:55:40 IST 2013

Ви можете побачити тут після того, як я проаналізую об'єкт дат, перетворюючи його в початковий формат (формат, який показує перед форматуванням), але я хочу, щоб об'єкт Дата, як він з'являється у другій лінії друку (після форматування), є методом .format, повертає String не об'єкт Дата , як я можу це виправити?

Дякую

1

6 Відповіді

Об'єкт Date не визначає жодного формату. Date - це просто довге число з часом. Щоб змінити його формат, вам слід скористатися об'єктом String , як це було зроблено у вашому прикладі.

Якщо ви проаналізуєте свій приклад:

  • перед форматуванням: показує формат DEFAULT для Date , що пропонує System.out.println .
  • після форматування: показує формат, наданий після використання SimpleDateFormat .
  • після розбору: ми знову в першому випадку
6
додано
Я хочу, щоб остаточний випуск був об'єктом Date (не як String) у моєму форматі ("EEE MMM dd yyyy hh: mm: ss zzz"), як я можу це зробити у такому випадку?
додано Автор user1573690, джерело

Об'єкт Date не визначає жодного формату. Date - це просто довге число з часом. Щоб змінити його формат, вам слід скористатися об'єктом String , як це було зроблено у вашому прикладі.

Якщо ви проаналізуєте свій приклад:

  • перед форматуванням: показує формат DEFAULT для Date , що пропонує System.out.println .
  • після форматування: показує формат, наданий після використання SimpleDateFormat .
  • після розбору: ми знову в першому випадку
6
додано
Я хочу, щоб остаточний випуск був об'єктом Date (не як String) у моєму форматі ("EEE MMM dd yyyy hh: mm: ss zzz"), як я можу це зробити у такому випадку?
додано Автор user1573690, джерело
System.out.println("after parse "+invoiceDate);

Тут ви просто намагаєтеся надрукувати об'єкт Date . Об'єкт Date сам по собі не має жодного формату. Клас Date представляє певну мить за часом з точністю до мілісекунди. Отже, ми використовуємо DateFormat , щоб відформатувати вихідний рядок, який надруковано на друк Date об'єкт Щоб відобразити той самий вихід, що і другий вираз, потрібно його знову відформатувати.

System.out.println("after parse"+inputDf.format(invoiceDate));

Подивіться на Javadoc для реалізації toString() для Date :

Перетворює об'єкт цієї дати в рядок форми:

     

dow mon dd hh: mm: ss zzz yyyy

1
додано
System.out.println("after parse "+invoiceDate);

Тут ви просто намагаєтеся надрукувати об'єкт Date . Об'єкт Date сам по собі не має жодного формату. Клас Date представляє певну мить за часом з точністю до мілісекунди. Отже, ми використовуємо DateFormat , щоб відформатувати вихідний рядок, який надруковано на друк Date об'єкт Щоб відобразити той самий вихід, що і другий вираз, потрібно його знову відформатувати.

System.out.println("after parse"+inputDf.format(invoiceDate));

Подивіться на Javadoc для реалізації toString() для Date :

Перетворює об'єкт цієї дати в рядок форми:

     

dow mon dd hh: mm: ss zzz yyyy

1
додано

Ця поведінка пов'язана з тим, що SimpleDateFomat не накладає на себе дату. SimpleDateFormat - це лише шаблон для отримання форматованого виходу з будь-якої Date , але це не змінює саму дату. Date не має формату, тому

System.out.println("before format  "+invoiceDate);

за замовчуванням використовується стандартний шаблон формату.

Фактично, SimpleDateFormat - це саме спосіб досягти того, що ви хочете, тобто використовувати його для правильного форматування вашого виразу кожного разу, коли вам це потрібно. Формування об'єкта дати дає вам представлення його, String .

1
додано
Я можу зрозуміти, що ви говорите, то як я можу змінити формат даної дати, не перетворюючи його в String? Я хочу змінити формат для його використання в запиті db
додано Автор user1573690, джерело
Немає фактично вибраного запиту для колекції MongoDB
додано Автор user1573690, джерело
добре, спасибі, я спробую це знову
додано Автор user1573690, джерело
@ user1573690: ви можете використовувати будь-який формат у запиті db, чи хочете ви вставити запис, якщо це так, формат дати не має значення
додано Автор Bhavik Shah, джерело
Не працювали з MongoDB, але, як і раніше, формат має бути несуттєвим, оскільки формати дат є вихідними уявленнями, а не різними версіями об'єктів дати. Об'єкт дати не має певного формату.
додано Автор Scorpio, джерело

Ця поведінка пов'язана з тим, що SimpleDateFomat не накладає на себе дату. SimpleDateFormat - це лише шаблон для отримання форматованого виходу з будь-якої Date , але це не змінює саму дату. Date не має формату, тому

System.out.println("before format  "+invoiceDate);

за замовчуванням використовується стандартний шаблон формату.

Фактично, SimpleDateFormat - це саме спосіб досягти того, що ви хочете, тобто використовувати його для правильного форматування вашого виразу кожного разу, коли вам це потрібно. Формування об'єкта дати дає вам представлення його, String .

1
додано
Я можу зрозуміти, що ви говорите, то як я можу змінити формат даної дати, не перетворюючи його в String? Я хочу змінити формат для його використання в запиті db
додано Автор user1573690, джерело
Немає фактично вибраного запиту для колекції MongoDB
додано Автор user1573690, джерело
добре, спасибі, я спробую це знову
додано Автор user1573690, джерело
@ user1573690: ви можете використовувати будь-який формат у запиті db, чи хочете ви вставити запис, якщо це так, формат дати не має значення
додано Автор Bhavik Shah, джерело
Не працювали з MongoDB, але, як і раніше, формат має бути несуттєвим, оскільки формати дат є вихідними уявленнями, а не різними версіями об'єктів дати. Об'єкт дати не має певного формату.
додано Автор Scorpio, джерело
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників