Які формати дат доступні в класі SimpleDateFormat?


84

Хто-небудь може повідомити мене про формати дат, доступні в класі SimpleDateFormat.

Я пройшов api, але не зміг знайти задовільної відповіді. Будь-яка допомога дуже вдячна.


3
Який формат ви шукаєте? Ви повинні побудувати формат, що складається з необхідних вам елементів.
Девід Грант,

3
Ви можете створити будь-який формат, який дозволяє API. Остаточного списку немає.
Пітер Лорі

Відповіді:


140

Формати дати та часу добре описані нижче

SimpleDateFormat (Java Platform SE 7) - Шаблони дати та часу

Може існувати nкількість форматів, які ви можете створити. ех - dd/MM/yyyyабо YYYY-'W'ww-uви можете змішувати та поєднувати літери, щоб досягти потрібного зразка. Візерунки букв наведені нижче.

  • G - Позначник ери (AD)
  • y - Рік (1996; 96)
  • Y - Рік тижня (2009; 09)
  • M - Місяць у році (липень; липень; 07)
  • w - Тиждень у році (27)
  • W - Тиждень у місяці (2)
  • D - День у році (189)
  • d - День у місяці (10)
  • F - День тижня в місяці (2)
  • E - Назва дня в тижні (вівторок; вівторок)
  • u - номер дня тижня (1 = понеділок, ..., 7 = неділя)
  • a - маркер AM / PM
  • H - Година в день (0-23)
  • k - Година в день (1-24)
  • K - Година вранці / вечора (0-11)
  • h - Година вранці / вечора (1-12)
  • m - Хвилина в годині (30)
  • s - Другий за хвилину (55)
  • S - Мілісекунди (978)
  • z - загальний часовий пояс (тихоокеанський стандартний час; PST; GMT-08: 00)
  • Z - часовий пояс RFC 822 (-0800)
  • X - часовий пояс ISO 8601 (-08; -0800; -08: 00)

Для синтаксичного аналізу:

2000-01-23T04: 56: 07.000 + 0000

Використання: new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");


Дякую Quoi..Але не могли б ви повідомити, як я можу перетворити дати в різні стандарти, такі як EST, IST, gdt, gmt тощо?
Abhishek_Mishra

1
Тоді ви шукаєте дату в іншому регіоні. SimpleDateFormatдозволити встановити локаль у конструкторі. SimpleDateFormat formatter = new SimpleDateFormat(pattern, locale);
Subhrajyoti Majumder

Гаразд, це те, що я шукав .. Дякую Quoi .. :)
Abhishek_Mishra

Я ціную вашу відкритість. :)
Subhrajyoti Majumder

1
Не плутайте Z та 'Z'. Я був дурень, і я сподіваюся, що хтось інший не буде схожий на мене.
Тіфан Джу

52

Дозвольте мені викинути деякий приклад коду, який я отримав з http://www3.ntu.edu.sg/home/ehchua/programming/java/DateTimeCalendar.html Тоді ви можете пограти з різними опціями, поки не зрозумієте його.

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTest {
   public static void main(String[] args) {
       Date now = new Date();

       //This is just Date's toString method and doesn't involve SimpleDateFormat
       System.out.println("toString(): " + now);  // dow mon dd hh:mm:ss zzz yyyy
       //Shows  "Mon Oct 08 08:17:06 EDT 2012"

       SimpleDateFormat dateFormatter = new SimpleDateFormat("E, y-M-d 'at' h:m:s a z");
       System.out.println("Format 1:   " + dateFormatter.format(now));
       // Shows  "Mon, 2012-10-8 at 8:17:6 AM EDT"

       dateFormatter = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
       System.out.println("Format 2:   " + dateFormatter.format(now));
       // Shows  "Mon 2012.10.08 at 08:17:06 AM EDT"

       dateFormatter = new SimpleDateFormat("EEEE, MMMM d, yyyy");
       System.out.println("Format 3:   " + dateFormatter.format(now));
       // Shows  "Monday, October 8, 2012"

       // SimpleDateFormat can be used to control the date/time display format:
       //   E (day of week): 3E or fewer (in text xxx), >3E (in full text)
       //   M (month): M (in number), MM (in number with leading zero)
       //              3M: (in text xxx), >3M: (in full text full)
       //   h (hour): h, hh (with leading zero)
       //   m (minute)
       //   s (second)
       //   a (AM/PM)
       //   H (hour in 0 to 23)
       //   z (time zone)
       //  (there may be more listed under the API - I didn't check)

   }

}

Удачі!


7

java.time

ОНОВЛЕННЯ

Інші питання застаріли. Такі страшні класи, які SimpleDateFormatбули витіснені роками тому сучасними класами java.time .

На замовлення

Для визначення власних шаблонів форматування коди в DateTimeFormatterкоді подібні, але не зовсім такі, як коди в SimpleDateFormat. Обов’язково вивчіть документацію. І шукайте переповнення стека, щоб знайти багато прикладів.

DateTimeFormatter f = 
    DateTimeFormatter.ofPattern( 
        "dd MMM uuuu" , 
        Locale.ITALY 
    ) 
;

Стандарт ISO 8601

Стандарт ISO 8601 визначає формати для багатьох типів значень дати та часу. Ці формати призначені для обміну даними, легко аналізуються машиною, а також легко читаються людьми в різних культурах.

У java.time класи використовують ISO 8601 формати за замовчуванням при створенні / розбору рядків. Просто викликайте toString& parseметоди. Не потрібно вказувати шаблон форматування.

Instant.now().toString()

2018-11-05T18: 19: 33.017554Z

Для значення в UTC, в Zкінці означає UTC, і вимовляється як "зулу".

Локалізуйте

Замість того, щоб вказати шаблон форматування, ви можете дозволити java.time автоматично локалізувати для вас. Використовуйте DateTimeFormatter.ofLocalized…методи.

Отримайте поточний момент за допомогою годинника настінного годинника, який використовують люди певного регіону (часовий пояс).

ZoneId z = ZoneId.of( "Africa/Tunis" );
ZonedDateTime zdt = ZonedDateTime.now( z );

Створіть текст у стандартному форматі ISO 8601, розумно розширений, щоб додати назву часового поясу у квадратні дужки.

zdt.toString (): 2018-11-05T19: 20: 23.765293 + 01: 00 [Африка / Туніс]

Створити автоматично локалізований текст.

Locale locale = Locale.CANADA_FRENCH;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ).withLocale( locale );

String output = zdt.format( f );

вихід: понеділок, 5 листопада 2018 р., 19:20:23 центральний час Європи

Як правило, краща практика для автоматичної локалізації, а не ладу з жорстко закодованими шаблонами форматування.


Про java.time

Java.time каркас вбудований в Java 8 і пізніших версій. Ці класи витісняти неприємні старі застарілі класи дати і часу , такі як java.util.Date, Calendar, і SimpleDateFormat.

Щоб дізнатись більше, див. Підручник Oracle . І шукайте в Stack Overflow багато прикладів та пояснень. Специфікація - JSR 310 .

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

Ви можете обмінювати об'єкти java.time безпосередньо з базою даних. Використовуйте драйвер JDBC, сумісний з JDBC 4.2 або новішою. Не потрібні рядки, не потрібні java.sql.*класи. Hibernate 5 та JPA 2.2 підтримують java.time .

Де отримати класи java.time?


5

перевірте формати тут http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

головний

System.out.println("date  : " + new classname().getMyDate("2014-01-09 14:06", "dd-MMM-yyyy E hh:mm a z", "yyyy-MM-dd HH:mm"));

метод

 public String getMyDate(String myDate, String returnFormat, String myFormat)
            {
                DateFormat dateFormat = new SimpleDateFormat(returnFormat);
                Date date=null;
                String returnValue="";
                try {
                    date = new SimpleDateFormat(myFormat, Locale.ENGLISH).parse(myDate);
                    returnValue = dateFormat.format(date);
                } catch (ParseException e) {
                    returnValue= myDate;
                    System.out.println("failed");
                    e.printStackTrace();
                }

            return returnValue;
            }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.