Какие форматы даты доступны в классе SimpleDateFormat?

84

Может ли кто-нибудь сообщить мне о форматах даты, доступных в классе SimpleDateFormat.

Я прошел через api, но не смог найти удовлетворительного ответа. Любая помощь приветствуется.

Абхишек Мишра
источник
3
Какой формат вам нужен? Вы должны создать формат, состоящий из необходимых вам элементов.
Дэвид Грант
3
Вы можете создать любой формат, который позволяет API. Окончательного списка нет.
Питер Лоури 08

Ответы:

140

Форматы даты и времени подробно описаны ниже.

SimpleDateFormat (Java Platform SE 7) - шаблоны даты и времени

nМожет быть количество форматов, которые вы можете сделать. ex - 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 - Час в am / pm (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);
Субхраджьоти Маджумдер 08
Хорошо, это то, что я искал ... Спасибо Quoi .. :)
Abhishek_Mishra
Я ценю вашу открытость. :)
Subhrajyoti Majumder 08
1
Не путайте Z и Z. Я был дураком и надеюсь, что никто другой не будет похож на меня.
Tiefan Ju
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. Обязательно изучите документацию. И поищите множество примеров в Stack Overflow.

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 и произносится «Zulu».

Локализовать

Вместо того, чтобы указывать шаблон форматирования, вы можете позволить 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 );

вывод: lundi 5 novembre 2018 à 19:20:23 heure normale d'Europe centrale

Как правило, лучше использовать автоматическую локализацию, чем беспокоиться о жестко заданных шаблонах форматирования.


О java.time

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

Чтобы узнать больше, см. Oracle Tutorial . И поищите в 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;
            }
ринутомаз
источник