Класс SimpleDateFormat
- Все реализуемые интерфейсы:
Serializable, Cloneable
public class SimpleDateFormat extends DateFormat
SimpleDateFormat — конкретный класс для форматирования и разбора дат с учётом локали. Он позволяет форматировать (дата → текст), разбирать (текст → дата) и нормализовать даты. SimpleDateFormat позволяет начать с выбора любых пользовательских шаблонов форматирования даты и времени. Однако рекомендуется создавать форматировщик даты и времени с помощью getTimeInstance, getDateInstance или getDateTimeInstance в DateFormat. Каждый из этих методов класса может возвращать форматировщик даты и времени, инициализированный шаблоном формата по умолчанию. При необходимости шаблон формата можно изменить с помощью методов applyPattern. Дополнительные сведения об использовании этих методов см. в разделе DateFormat.
Шаблоны даты и времени
Форматы даты и времени задаются строками шаблонов даты и времени. В строках шаблонов даты и времени не заключённые в кавычки латинские буквы от 'A' до 'Z' и от 'a' до 'z' интерпретируются как буквы шаблона, обозначающие компоненты строки даты или времени. Текст можно заключать в одинарные кавычки ('), чтобы предотвратить его интерпретацию. "''" обозначает одинарную кавычку. Все остальные символы не интерпретируются: они просто копируются в выходную строку при форматировании или сопоставляются с входной строкой при разборе.
Определены следующие буквы шаблона (все остальные символы от 'A' до 'Z' и от 'a' до 'z', не указанные в таблице ниже, зарезервированы). При передаче шаблона с не заключённым в кавычки зарезервированным символом методы applyPattern(String), applyLocalizedPattern(String) и SimpleDateFormat constructors выбрасывают IllegalArgumentException.
Буквы шаблона обычно повторяются, поскольку их количество определяет точный способ представления:
Буква Компонент даты или времени Представление Примеры GОбозначение эры Текст ADyГод Год 1996;96YНеделя года Год 2009;09MМесяц года (зависит от контекста) Месяц July;Jul;07LМесяц года (самостоятельная форма) Месяц July;Jul;07wНеделя года Число 27WНеделя месяца Число 2DДень года Число 189dДень месяца Число 10FДень недели в месяце Число 2EНазвание дня недели Текст Tuesday;TueuНомер дня недели (1 = понедельник, ..., 7 = воскресенье) Число 1aОбозначение до/после полудня Текст PMHЧас дня (0–23) Число 0kЧас дня (1–24) Число 24KЧас до/после полудня (0–11) Число 0hЧас до/после полудня (1–12) Число 12mМинута часа Число 30sСекунда минуты Число 55SМиллисекунда Число 978zЧасовой пояс Общий часовой пояс Pacific Standard Time;PST;GMT-08:00ZЧасовой пояс Часовой пояс RFC 822 -0800XЧасовой пояс Часовой пояс ISO 8601 -08;-0800;-08:00
-
Текст: При форматировании, если букв шаблона 4 или больше, используется полная форма; в противном случае, если доступна, используется краткая или сокращённая форма. При разборе принимаются обе формы независимо от количества букв шаблона.
-
Число: При форматировании количество букв шаблона задаёт минимальное число цифр, а более короткие числа дополняются нулями до этого количества. При разборе количество букв шаблона игнорируется, кроме случаев, когда оно необходимо для разделения двух соседних полей.
-
Год: Если
Calendarформатировщика — григорианский календарь, применяются следующие правила.
- При форматировании, если букв шаблона 2, год сокращается до 2 цифр; в противном случае он интерпретируется как число.
- При разборе, если букв шаблона больше 2, год интерпретируется буквально независимо от количества цифр. Поэтому при использовании шаблона "MM/dd/yyyy" строка "01/11/12" разбирается как 11 января 12 года н. э.
- При разборе с шаблоном сокращённого года ("y" или "yy")
SimpleDateFormatдолжен интерпретировать сокращённый год относительно некоторого столетия. Для этого даты корректируются так, чтобы они попадали в диапазон от 80 лет до и до 20 лет после момента создания экземпляраSimpleDateFormat. Например, при использовании шаблона "MM/dd/yy" и экземпляраSimpleDateFormat, созданного 1 января 1997 года, строка "01/11/12" будет интерпретирована как 11 января 2012 года, а строка "05/04/64" — как 4 мая 1964 года. При разборе в столетие по умолчанию преобразуются только строки, состоящие ровно из двух цифр, как определено методомCharacter.isDigit(char). Любая другая числовая строка, например строка из одной цифры, строка из трёх или более цифр либо строка из двух символов, не являющихся цифрами (например, "-1"), интерпретируется буквально. Поэтому строки "01/02/3" и "01/02/003" при разборе с тем же шаблоном интерпретируются как 2 января 3 года н. э. Аналогично, "01/02/-3" интерпретируется как 2 января 4 года до н. э.
Если задан год недели'Y', а календарь не поддерживает годы недель, вместо него используется календарный год ('y'). Поддержку годов недель можно проверить вызовомgetCalendar().isWeekDateSupported().
-
Месяц: Если букв шаблона 3 или больше, месяц интерпретируется как текст; в противном случае он интерпретируется как число.
- Буква M задаёт контекстно-зависимые названия месяцев, например форму названия в составе выражения. Буква M зависит от контекста: если она используется в самостоятельном шаблоне, например "MMMM", она задаёт самостоятельную форму названия месяца; если же она используется в шаблоне с другими полями, например "d MMMM", она задаёт форму названия месяца для форматирования. Например, в каталанском языке январь в форме для форматирования — "de gener", а в самостоятельной форме — "gener". В этом случае "MMMM" выдаст "gener", а часть, обозначающая месяц, в шаблоне "d MMMM" выдаст "de gener". Если
DateFormatSymbolsявно задан конструкторомSimpleDateFormat(String,DateFormatSymbols)или методомsetDateFormatSymbols(DateFormatSymbols), используются названия месяцев, заданные вDateFormatSymbols. - Буква L задаёт самостоятельную форму названий месяцев.
- Буква M задаёт контекстно-зависимые названия месяцев, например форму названия в составе выражения. Буква M зависит от контекста: если она используется в самостоятельном шаблоне, например "MMMM", она задаёт самостоятельную форму названия месяца; если же она используется в шаблоне с другими полями, например "d MMMM", она задаёт форму названия месяца для форматирования. Например, в каталанском языке январь в форме для форматирования — "de gener", а в самостоятельной форме — "gener". В этом случае "MMMM" выдаст "gener", а часть, обозначающая месяц, в шаблоне "d MMMM" выдаст "de gener". Если
-
Общий часовой пояс: Часовые пояса интерпретируются как текст, если у них есть названия. Для часовых поясов, заданных значением смещения относительно GMT, используется следующий синтаксис:
GMTOffsetTimeZone:Часы должны быть в диапазоне от 0 до 23, а Минуты — от 00 до 59. Формат не зависит от локали, а цифры должны принадлежать к блоку Basic Latin стандарта Unicode.GMTSign Hours:Minutes Sign: one of+ -Hours: Digit Digit Digit Minutes: Digit Digit Digit: one of0 1 2 3 4 5 6 7 8 9При разборе также принимаются часовые пояса RFC 822.
-
Часовой пояс RFC 822: При форматировании используется формат часового пояса RFC 822 длиной 4 цифры:
RFC822TimeZone: Sign TwoDigitHours Minutes TwoDigitHours: Digit DigitДвузначное число часов должно быть в диапазоне от 00 до 23. Остальные определения соответствуют определениям для общих часовых поясов.При разборе также принимаются общие часовые пояса.
-
Часовой пояс ISO 8601: Количество букв шаблона задаёт форматирование и разбор следующим образом:
ISO8601TimeZone: OneLetterISO8601TimeZone TwoLetterISO8601TimeZone ThreeLetterISO8601TimeZone OneLetterISO8601TimeZone: Sign TwoDigitHoursОстальные определения соответствуют определениям для общих часовых поясов или часовых поясов RFC 822.ZTwoLetterISO8601TimeZone: Sign TwoDigitHours MinutesZThreeLetterISO8601TimeZone: Sign TwoDigitHours:MinutesZПри форматировании, если значение смещения относительно GMT равно 0, формируется
"Z". Если букв шаблона 1, дробная часть часа игнорируется. Например, если шаблон —"X", а часовой пояс —"GMT+05:30", формируется"+05".При разборе
"Z"разбирается как обозначение часового пояса UTC. Общие часовые пояса не принимаются.Если букв шаблона 4 или больше, при создании
SimpleDateFormatили применении шаблона выбрасываетсяIllegalArgumentException.
SimpleDateFormat также поддерживает строки локализованных шаблонов даты и времени. В таких строках описанные выше буквы шаблонов могут заменяться другими буквами шаблона, зависящими от локали. SimpleDateFormat не выполняет локализацию текста, отличного от букв шаблона; это должен делать клиентский код класса. Примеры
В следующих примерах показана интерпретация шаблонов даты и времени для локали США. Дата и время — 2001-07-04 12:08:56 по местному времени в часовом поясе Тихоокеанского времени США.
Шаблон даты и времени Результат "yyyy.MM.dd G 'at' HH:mm:ss z"2001.07.04 AD at 12:08:56 PDT"EEE, MMM d, ''yy"Wed, Jul 4, '01"h:mm a"12:08 PM"hh 'o''clock' a, zzzz"12 o'clock PM, Pacific Daylight Time"K:mm a, z"0:08 PM, PDT"yyyyy.MMMMM.dd GGG hh:mm aaa"02001.July.04 AD 12:08 PM"EEE, d MMM yyyy HH:mm:ss Z"Wed, 4 Jul 2001 12:08:56 -0700"yyMMddHHmmssZ"010704120856-0700"yyyy-MM-dd'T'HH:mm:ss.SSSZ"2001-07-04T12:08:56.235-0700"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"2001-07-04T12:08:56.235-07:00"YYYY-'W'ww-u"2001-W27-3
Синхронизация
Форматировщики дат не синхронизированы. Рекомендуется создавать отдельные экземпляры форматировщика для каждого потока. Если несколько потоков одновременно обращаются к одному форматировщику, синхронизацию необходимо выполнять извне.
- Примечание к API:
- Рассмотрите возможность использования
DateTimeFormatterв качестве неизменяемой и потокобезопасной альтернативы. - Начиная с версии:
- 1.1
- См. также:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в классе DateFormat
DateFormat.Field
Краткое описание полей
Поля, объявленные в классе DateFormat
AM_PM_FIELD, calendar, DATE_FIELD, DAY_OF_WEEK_FIELD, DAY_OF_WEEK_IN_MONTH_FIELD, DAY_OF_YEAR_FIELD, DEFAULT, ERA_FIELD, FULL, HOUR_OF_DAY0_FIELD, HOUR_OF_DAY1_FIELD, HOUR0_FIELD, HOUR1_FIELD, LONG, MEDIUM, MILLISECOND_FIELD, MINUTE_FIELD, MONTH_FIELD, numberFormat, SECOND_FIELD, SHORT, TIMEZONE_FIELD, WEEK_OF_MONTH_FIELD, WEEK_OF_YEAR_FIELD, YEAR_FIELD
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
SimpleDateFormat() |
Создаёт SimpleDateFormat с шаблоном и символами формата даты по умолчанию для локали форматирования по умолчанию FORMAT. |
SimpleDateFormat |
Создаёт SimpleDateFormat с заданным шаблоном и символами формата даты по умолчанию для локали форматирования по умолчанию FORMAT. |
SimpleDateFormat |
Создаёт SimpleDateFormat с заданным шаблоном и символами формата даты. |
SimpleDateFormat |
Создаёт SimpleDateFormat с заданным шаблоном и символами формата даты по умолчанию для заданной локали. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
applyLocalizedPattern |
Применяет к этому формату даты заданную строку локализованного шаблона. |
void |
applyPattern |
Применяет к этому формату даты заданную строку шаблона. |
Object |
clone() |
Создаёт копию этого SimpleDateFormat. |
boolean |
equals |
Сравнивает указанный объект с этим SimpleDateFormat на равенство. |
StringBuffer |
format |
Форматирует заданный Date в строку даты и времени и добавляет результат к заданному StringBuffer. |
AttributedCharacterIterator |
formatToCharacterIterator |
Форматирует объект, создавая AttributedCharacterIterator. |
Date |
get2DigitYearStart() |
Возвращает начальную дату 100-летнего периода, к которому относятся годы, заданные двумя цифрами. |
DateFormatSymbols |
getDateFormatSymbols() |
Возвращает копию символов формата даты и времени этого формата даты. |
int |
hashCode() |
Возвращает значение хеш-кода этого SimpleDateFormat. |
Date |
parse |
Разбирает текст из строки, создавая Date. |
void |
set2DigitYearStart |
Задаёт начало 100-летнего периода, в который будут интерпретироваться годы из двух цифр, используя указанную пользователем дату. |
void |
setDateFormatSymbols |
Задаёт символы формата даты и времени для этого формата даты. |
String |
toLocalizedPattern() |
Возвращает строку локализованного шаблона, описывающую этот формат даты. |
String |
toPattern() |
Возвращает строку шаблона, описывающую этот формат даты. |
String |
toString() |
Возвращает строку с описанием этого SimpleDateFormat для отладки. |
Методы, объявленные в классе DateFormat
format, format, getAvailableLocales, getCalendar, getDateInstance, getDateInstance, getDateInstance, getDateTimeInstance, getDateTimeInstance, getDateTimeInstance, getInstance, getNumberFormat, getTimeInstance, getTimeInstance, getTimeInstance, getTimeZone, isLenient, parse, parseObject, setCalendar, setLenient, setNumberFormat, setTimeZone
Методы, объявленные в классе Format
format, parseObject
Подробное описание конструкторов
SimpleDateFormat
public SimpleDateFormat()
SimpleDateFormat с использованием шаблона по умолчанию и символов формата даты для локали по умолчанию FORMAT. Примечание: Этот конструктор может поддерживать не все локали. Для полного охвата используйте фабричные методы класса DateFormat.SimpleDateFormat
public SimpleDateFormat(String pattern)
SimpleDateFormat с использованием указанного шаблона и символов формата даты по умолчанию для локали по умолчанию FORMAT. Примечание: Этот конструктор может поддерживать не все локали. Для полного охвата используйте фабричные методы класса DateFormat. Эквивалентно вызову SimpleDateFormat(pattern, Locale.getDefault(Locale.Category.FORMAT)).
- Параметры:
-
pattern— шаблон, описывающий формат даты и времени - Исключения:
-
NullPointerException— если указанный шаблон равен null -
IllegalArgumentException— если указанный шаблон недопустим - См. также:
SimpleDateFormat
public SimpleDateFormat(String pattern, Locale locale)
SimpleDateFormat с использованием указанного шаблона и символов формата даты по умолчанию для указанной локали. Примечание: Этот конструктор может поддерживать не все локали. Для полного охвата используйте фабричные методы класса DateFormat.- Параметры:
-
pattern— шаблон, описывающий формат даты и времени -
locale— локаль, символы формата даты которой следует использовать - Исключения:
-
NullPointerException— если указанный шаблон или локаль равны null -
IllegalArgumentException— если указанный шаблон недопустим
SimpleDateFormat
public SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)
SimpleDateFormat с использованием указанного шаблона и символов формата даты.- Параметры:
-
pattern— шаблон, описывающий формат даты и времени -
formatSymbols— символы формата даты, используемые для форматирования - Исключения:
-
NullPointerException— если указанный шаблон или formatSymbols равен null -
IllegalArgumentException— если указанный шаблон недопустим
Подробное описание методов
set2DigitYearStart
public void set2DigitYearStart(Date startDate)
- Параметры:
-
startDate— при разборе двузначные годы будут отнесены к диапазону отstartDateдоstartDate + 100 years. - Исключения:
-
NullPointerException— еслиstartDateравноnull. - Начиная с:
- 1.2
- См. также:
get2DigitYearStart
public Date get2DigitYearStart()
- Возвращает:
- начало 100-летнего периода, к которому относятся двузначные годы при разборе
- Начиная с:
- 1.2
- См. также:
format
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos)
Date в строку даты и времени и добавляет результат к указанному StringBuffer.- Определено в:
-
formatв классеDateFormat - Параметры:
-
date— значение даты и времени, которое нужно отформатировать в строку даты и времени. -
toAppendTo— строка, в которую добавляется новый текст даты и времени. -
pos— отслеживает позицию поля в возвращаемой строке. Например, для текста даты и времени"1996.07.10 AD at 15:08:56 PDT", если указанноеfieldPosition— этоDateFormat.YEAR_FIELD, начальный и конечный индексыfieldPositionбудут установлены соответственно в 0 и 4. Обратите внимание: если одно и то же поле даты и времени встречается в шаблоне несколько раз,fieldPositionбудет установлено для первого вхождения этого поля даты и времени. Например, при форматированииDateв строку даты и времени"1 PM PDT (Pacific Daylight Time)"с использованием шаблона"h a z (zzzz)"и поля выравниванияDateFormat.TIMEZONE_FIELDначальный и конечный индексыfieldPositionбудут установлены соответственно в 5 и 8 для первого вхождения символа шаблона часового пояса'z'. - Возвращает:
- отформатированную строку даты и времени.
- Исключения:
-
NullPointerException— если какой-либо из параметров равенnull.
formatToCharacterIterator
public AttributedCharacterIterator formatToCharacterIterator(Object obj)
AttributedCharacterIterator. Возвращенный AttributedCharacterIterator можно использовать для построения результирующей строки, а также для получения сведений о ней. Ключ каждого атрибута AttributedCharacterIterator будет иметь тип DateFormat.Field, а соответствующее значение атрибута будет совпадать с ключом атрибута.
- Переопределяет:
-
formatToCharacterIteratorв классеFormat - Параметры:
-
obj— объект для форматирования - Возвращает:
- AttributedCharacterIterator, описывающий отформатированное значение.
- Исключения:
-
NullPointerException— если obj равен null. -
IllegalArgumentException— если Format не может отформатировать указанный объект или строка шаблона Format недопустима. - Начиная с:
- 1.4
parse
public Date parse(String text, ParsePosition pos)
Date. Метод пытается разобрать текст, начиная с индекса, заданного в pos. Если разбор выполнен успешно, индекс pos обновляется до позиции после последнего использованного символа (при разборе не обязательно используются все символы до конца строки), а разобранная дата возвращается. Обновленный pos можно использовать для указания начальной позиции следующего вызова этого метода. Если возникает ошибка, индекс pos не изменяется, индекс ошибки в pos устанавливается в позицию символа, на котором произошла ошибка, и возвращается null.
Эта операция разбора использует calendar для создания Date. Все поля даты и времени в
calendar очищаются перед разбором, а для отсутствующей информации о дате и времени используются значения полей даты и времени по умолчанию в calendar. Например, значение года в разобранном Date будет равно 1970 с GregorianCalendar, если при разборе значение года не указано. Значение
TimeZone может быть перезаписано в зависимости от указанного шаблона и значения часового пояса в text. Любое значение
TimeZone, ранее заданное вызовом setTimeZone, может потребоваться восстановить для дальнейших операций.
- Определено в:
-
parseв классеDateFormat - Параметры:
-
text—String, часть которого следует разобрать. -
pos— объектParsePositionс информацией об индексе и индексе ошибки, как описано выше. - Возвращает:
Date, разобранный из строки. В случае ошибки возвращает null.- Исключения:
-
NullPointerException— еслиtextилиposравен null.
toPattern
public String toPattern()
- Возвращает:
- строку шаблона, описывающую этот формат даты.
toLocalizedPattern
public String toLocalizedPattern()
- Возвращает:
- локализованную строку шаблона, описывающую этот формат даты.
applyPattern
public void applyPattern(String pattern)
- Параметры:
-
pattern— новый шаблон даты и времени для этого формата даты - Исключения:
-
NullPointerException— если указанный шаблон равен null -
IllegalArgumentException— если указанный шаблон недопустим
applyLocalizedPattern
public void applyLocalizedPattern(String pattern)
- Параметры:
-
pattern— строка, которую нужно преобразовать в новый шаблон формата даты и времени для этого формата - Исключения:
-
NullPointerException— если указанный шаблон равен null -
IllegalArgumentException— если указанный шаблон недопустим
getDateFormatSymbols
public DateFormatSymbols getDateFormatSymbols()
- Возвращает:
- символы формата даты и времени этого формата даты
- См. также:
setDateFormatSymbols
public void setDateFormatSymbols(DateFormatSymbols newFormatSymbols)
- Параметры:
-
newFormatSymbols— новые символы формата даты и времени - Исключения:
-
NullPointerException— если указанный newFormatSymbols равен null - См. также:
clone
public Object clone()
SimpleDateFormat. Также клонирует символы формата даты.- Переопределяет:
-
cloneв классеDateFormat - Возвращает:
- клона этого
SimpleDateFormat - См. также:
hashCode
public int hashCode()
SimpleDateFormat.- Переопределяет:
-
hashCodeв классеDateFormat - Требования к реализации:
- Этот метод вычисляет значение хеш-кода, используя значение, возвращаемое методом
toPattern(). - Возвращает:
- значение хеш-кода для этого
SimpleDateFormat - См. также:
toString
equals
public boolean equals(Object obj)
SimpleDateFormat на равенство. Возвращает true, если объект также является SimpleDateFormat и оба формата форматируют любое значение одинаково.- Переопределяет:
-
equalsв классеDateFormat - Требования к реализации:
- Этот метод проверяет равенство, определяя идентичность класса на основе
getClass(), а неinstanceof. Поэтому в методах equals подклассов ни один экземпляр этого класса не должен считаться равным экземпляру подкласса. - Параметры:
-
obj— объект для сравнения на равенство - Возвращает:
-
true, если указанный объект равен этомуSimpleDateFormat - См. также:
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/text/SimpleDateFormat.html