Oc-windows.ru

IT Новости из мира ПК
2 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java lang date

Классы Date, Calendar, DateFormat

Класс Date предназначен для работы с текущими датой и временем и позволяет отталкиваться от них для решения своих задач. При выходе новых версий Java часть методов класса была перемещена в классы Calendar и DateFormat.

При импорте выбирайте java.util.Date, а не java.sql.Date.

У класса есть два конструктора:

Первый конструктор без параметров инициализирует объект текущей датой и временем. Во втором конструкторе вы можете указать количество миллисекунд, прошедших с полуночи 1 января 1970 года.

  • boolean after(Date date) — если объект класса Date содержит более позднюю дату, чем указано в параметре, то возвращается true
  • boolean before(Date date) — если объект класса Date содержит более раннюю дату, чем указано в параметре, то возвращается true
  • int compareTo(Date date) — сравнивает даты. Возвращает 0, если совпадают, отрицательное значение — если вызывающая дата более ранняя, положительное значение — если вызывающая дата более поздняя, чем в параметре
  • boolean equals(Object object) — если даты совпадают, то возвращается true
  • long getTime() — возвращает количество миллисекунд, прошедших с полуночи 1 января 1970 года
  • void setTime(long milliseconds) — устанавливает время и дату в виде числа миллисекунд, прошедших с полночи 1 января 1970 года.

Если вы посмотрите документацию, то увидите, что существует множество методов для получения или установки отдельных компонентов времени и даты, например, getMinutes()/setMinutes() и др. Все они являются устаревшими и вместо них следует использовать класс Calendar.

Простой пример вывода даты на экран.

С помощью метода getTime() можно отобразить количество миллисекунд, прошедших с 1 января 1970 года. Обновим пример

Calendar

Абстрактный класс Calendar позволяет преобразовать время в миллисекундах в более удобном виде — год, месяц, день, часы, минуты, секунды. Существуют также подклассы, например, GregorianCalendar.

Переменная типа boolean под именем areFieldsSet указывает, были установлены компоненты времени. Переменная fields — это массив целочисленных значений, содержащий компоненты времени. Переменная isSet — массив типа boolean, указывающий, был ли установлен специфический компонент времени. Переменная time (тип long) содержит текущее время объекта. Переменная isTimeSet (тип boolean) указывает, что было установлено текущее время.

У класса много методов. Вкратце опишем часть из них:

  • abstract void add(int field, int value) — добавляет value к компоненту времени или даты, указанному в параметре field (например, Calendar.HOUR). Чтобы отнять, используйте отрицательное значение.
  • boolean after(Object calendar) — возвращает значение true, если вызывающий объект класса Calendar содержит более позднюю дату, чем calendar.
  • boolean before(Object calendar) — возвращает значение true, если вызывающий объект класса Calendar содержит более раннюю дату, чем calendar.
  • final void clear() — обнуляет все компоненты времени в вызывающем объекте.
  • final void clear(int field) — обнуляет компонент, указанный в параметре field
  • int get(int field) — возвращает значение одного компонента, например, Calendar.MINUTE
  • synchronized static Locale[] getAvailableLocales() — возвращает массив объектов класса Locale, содержащий региональные данные
  • synchronized static Calendar getInstance() — возвращает объект класса Calendar для региональных данных и часового пояса по умолчанию. Есть и другие перегруженные версии.
  • final Date getTime() — возвращает объекта класса Date, содержащий время, эквивалентное вызывающему объекту
  • TimeZone getTimeZone() — возвращает часовой пояс
  • final boolean isSet(int field) — возвращает значение true, если указанный компонент времени указан.
  • void set(int field, int value) — устанавливает компоненты даты или времени. Есть перегруженные версии
  • final void setTime(Date date) — устанавливает различные компоненты даты и времени через объект класса Date
  • void setTimeZone(TimeZone timezone) — устанавливает часовой пояс через объект класса TimeZone

Также в календаре определены много различных констант: AUGUST и другие месяцы, SATURDAY и другие дни недели, HOUR и т.д.

GregorianCalendar

Класс GregorianCalendar является подклассом Calendar, который представляет обычный Григорианский календарь. Метод getInstance() класса Calendar обычно возвращает объект класса GregorianCalendar, инициированный текущей датой и временем согласно региональным настройкам.

У класса есть два поля AD и BC — до нашей эры и наша эра.

Кроме стандартных методов, которые есть в классе Calendar, у GregorianCalendar есть метод isLeapYear() для проверки високосного года.

Если год високосный, то возвращается true.

Отсчёт месяцев идёт от нуля, поэтому декабрь будет одиннадцатым месяцем. Чтобы не путаться с такими случаями, проще использовать понятные константы:

А получать нужные отрезки времени можно через метод get(). Например, узнать, какой месяц содержится в созданной нами дате можно так:

Изменить состояние объекта можно через метод set(). Например, установим новую дату у нашего объекта.

Можно сдвинуть дату на определённый период с помощью метода add(). Отодвинем дату на два месяца.

Читать еще:  Класс thread java

Методы getTime() и setTime() работают с объектами Date и полезны для преобразования.

TimeZone

Класс TimeZone позволяет работать с часовыми поясами, смещёнными относительно Гринвича, также известного универсальное глобальное время (UTC). Класс также учитывает летнее время.

SimpleTimeZone

Класс SimpleTimeZone — подкласс класса TimeZone и позволяет работать с часовыми поясами в Григорианском календаре.

Класс DateFormat

Класс DateFormat является абстрактным классом, с помощью которого можно форматировать и анализировать показания даты и времени. метод getDateInstance() возвращает экземпляр класса DateFormat, который может форматировать информацию о дате.

Чаще всего используется метод format(), позволяющий вывести дату в нужном формате.

Класс SimpleDateFormat

Класс SimpleDateFormat является подклассом класса DateFormat и позволяет определять собственные шаблоны форматирования для отображения даты и времени.

Символы форматирования строки

  • A — AM или PM
  • d — день месяца (1-31)
  • D — день в году (1-366)
  • H — часы в формате AM/PM (1-12)
  • K — часы в формате суток (1-24)
  • M — минуты (0-59)
  • S — секунды (0-59)
  • W — неделя в году (1-53)
  • y — год
  • z — часовой пояс

Количество повторений символа определяет способ представления даты. Например, можно указать hh:mm:ss, а можно h:m:s. В первом случае будет отображаться ноль перед цифрой.

Примеры работы с датами и временем можно найти в статье на эту тему.

16. Java — Дата и время

Java предоставляет класс Date, который доступен в пакете java.util, этот класс заключает в себе текущую дату и время.

Содержание

Конструкторы

Класс Date поддерживает два конструктора, которые показаны ниже.

Конструктор и описание
1Date()
Этот конструктор инициализирует объект с текущей датой и временем.
2Date(long millisec)
Этот конструктор принимает аргумент равный числу миллисекунд, истекших с полуночи 1 января 1970 г.

Методы класса Date

Ниже представлены методы класса Date.

Методы с описанием
1boolean after(Date date)
Возвращает значение true, если вызывающий объект date содержит дату, которая раньше заданной даты, в противном случае он возвращает значение false.
2boolean before(Date date)
Возвращает значение true, если вызывающий объект date содержит дату, более раннюю, чем заданная дата, в противном случае он возвращает значение false.
3Object clone()
Дублирование вызывающего объекта date.
4int compareTo(Date date)
Сравнивает значение вызывающего объекта с этой датой. Возвращает 0, если значения равны. Возвращает отрицательное значение, если объект вызова является более ранним, чем дата. Возвращает положительное значение, если объект вызова позже даты.
5int compareTo(Object obj)
Работает точно так же compareTo(Date), если объект вызова имеет класс Date. В противном случае вызывает ClassCastException.
6boolean equals(Object date)
Возвращает значение true, если вызывающий объект date содержит то же время и дату, которая указана в date, в противном случае он возвращает значение false.
7long getTime()
Возвращает количество миллисекунд, истекших с 1 января 1970 года.
8int hashCode()
Возвращает хэш-код для вызывающего объекта.
9void setTime(long time)
Задает дату и время, соответствующие моменту времени, что представляет собой общее затраченное время в миллисекундах от полуночи 1 января 1970 года.
10String toString()
Преобразует вызывающий объект date в строку и возвращает результат.

Текущая дата и время в Java

Получить текущую дату и время в Java достаточно не трудно. Вы можете использовать простой объект date вместе с методом toString(), чтобы вывести текущую дату и время следующим образом:

Получим следующий результат:

Сравнение дат

Существуют три способа в Java сравнить даты:

  • Можно использовать функцию getTime(), чтобы получить количество миллисекунд, прошедших с момента полуночи 1 января 1970, для обоих объектов, а затем сравнить эти два значения.
  • Вы можете использовать методы before(), after() и equals(). Поскольку 12 число месяца раньше 18 числа, например, new Date(99, 2, 12).before(new Date (99, 2, 18)) возвращает значение true.
  • Можно использовать метод compareTo(), который определяется сопоставимым интерфейсом и реализуется по дате.

Форматирование даты с помощью SimpleDateFormat

SimpleDateFormat — это конкретный класс для парсинга и форматирования даты в Java. SimpleDateFormat позволяет начать с выбора любых пользовательских шаблонов для форматирования даты и времени. Например:

Получим следующий результат:

Формат-коды SimpleDateFormat

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

СимволОписаниеПример
GОбозначение эрын.э.
yГод из четырех цифр2016
MНомер месяца года11
dЧисло месяца13
hФормат часа в A.M./P.M.(1

12)

7
HФормат часа(0

23)

19
mМинуты30
sСекунды45
SМиллисекунды511
EДень неделиВс
DНомер дня в году318
FНомер дня недели в месяце2 (второе воскресение в этом месяце)
wНомер неделя в году46
WНомер недели в месяце2
aМаркер A.M./P.M.AM
kФормат часа(1

24)

24
KФормат часа в A.M./P.M.(0

11)

zЧасовой поясFET (Дальневосточноевропейское время)
Выделение для текстаТекст
»Одинарная кавычка

Форматирование даты с помощью printf

Формат даты и времени можно сделать без труда с помощью метода printf. Вы используете формат двух букв, начиная с t и заканчивая одним из символов в таблице, приведенных ниже. Например:

Получим следующий результат:

Было бы немного глупо, если Вы должны были бы поставить дату несколько раз для форматирования каждой части. По этой причине формат строки может указывать индекс аргумента для форматирования.

Индекс должен непосредственно следовать за % и завершаться $. Например:

Как конвертировать java.util.Date в java.sql.Date?

Я пытаюсь использовать java.util.Date в качестве входных данных, а затем создать запрос с его помощью — поэтому мне нужен java.sql.Date .

Я был удивлен, обнаружив, что он не может сделать преобразование неявно или явно — но я даже не знаю, как бы я это сделал, так как Java API все еще довольно новый для меня.

17 Ответов

Не берите в голову.

Как конвертировать java.util.Date в java.sql.Date?

Оба класса уже устарели.

  • Используйте классы java.time вместо устаревших java.util.Date & java.sql.Date с JDBC 4.2 или более поздними версиями.
  • Преобразование в / из java.time, если взаимодействие с кодом еще не обновлено до java.time.
  • Instant вместо java.util.Date
    Оба они представляют собой момент в UTC. но теперь уже с наносекундами вместо миллисекунд.
  • LocalDate вместо java.sql.Date
    Оба представляют собой значение только для даты без времени суток и без часового пояса.

Подробности

Если вы пытаетесь работать только со значениями даты (нет time-of-day, нет часового пояса), используйте класс LocalDate вместо java.util.Date .

java.time

В Java 8 и более поздних версиях проблемные старые классы даты-времени, поставляемые с ранними версиями Java, были заменены новым пакетом java.time . Смотрите Учебник Oracle . Большая часть функциональности была перенесена обратно в Java 6 & 7 в ThreeTen-Backport и далее адаптирована к Android в ThreeTenABP .

Тип данных SQL DATE предназначен только для даты, без time-of-day и без часового пояса. Java никогда не имел точно такого класса† до java.time.LocalDate в Java 8. Давайте создадим такое значение, получив сегодняшнюю дату в соответствии с определенным часовым поясом (часовой пояс важен при определении даты, так как новый день в Париже наступает раньше, чем в Монреале, например).

На этом мы, возможно, и закончим. Если ваш драйвер JDBC соответствует спецификации JDBC 4.2, вы должны быть в состоянии передать LocalDate через setObject на PreparedStatement для хранения в поле даты SQL.

Аналогично, используйте ResultSet::getObject для выборки из столбца даты SQL в объект Java LocalDate . Указание класса во втором аргументе делает ваш код типобезопасным .

Другими словами, весь этот вопрос не имеет отношения к JDBC 4.2 или более поздней версии.

Если ваш драйвер JDBC не работает таким образом, вам нужно вернуться к преобразованию в типы java.sql.

Преобразовать в java.sql.Date

Для преобразования используйте новые методы, добавленные к старым классам даты и времени. Мы можем вызвать java.sql.Date.valueOf(…) , чтобы преобразовать LocalDate .

И пошел в другую сторону.

Конверсии java.util.Date

Хотя вы должны избегать использования старых классов даты и времени, вы можете быть вынуждены сделать это при работе с существующим кодом. Если это так, вы можете конвертировать в/из java.time.

Пройдите через класс Instant , который представляет момент на временной шкале в UTC. Instant по идее аналогичен java.util.Date . Но обратите внимание, что Instant имеет разрешение до наносекунд , в то время как java.util.Date имеет только миллисекундное разрешение.

Для преобразования используйте новые методы, добавленные к старым классам. Например, java.util.Date.from( Instant ) и java.util.Date::toInstant .

Чтобы определить дату, нам нужен контекст часового пояса. В любой момент времени дата меняется по всему земному шару в зависимости от часового пояса. Примените ZoneId , чтобы получить ZonedDateTime .

† Класс java.sql.Date притворяется датированным только без time-of-day, но на самом деле делает time-of-day, настроенный на полуночное время. Сбивает с толку? Да, старые классы даты и времени-это беспорядок.

О java.time

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

Проект Joda-Time , находящийся сейчас в режиме обслуживания, советует перейти к классам java.time.

Чтобы узнать больше, смотрите учебник Oracle . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .

Вы можете обмениваться объектами java.time непосредственно с вашей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или более поздней версией. Нет необходимости в строках, нет необходимости в классах java.sql.* .

Где получить классы java.time?

С другим ответом у вас могут возникнуть проблемы с информацией о времени (сравните даты с неожиданными результатами!)

Эта функция возвращает преобразованную дату SQL из объекта даты java.

Преобразование java.util.Data в java.sql.Data приведет к потере часа, минуты и секунды. Поэтому, если это возможно, я предлагаю вам использовать java.sql.Timestamp вот так:

Для получения дополнительной информации вы можете проверить этот вопрос .

В моем случае выбор даты из JXDatePicker (java calender) и получение его хранятся в базе данных как SQL тип даты, ниже работает нормально ..

java.sql.Date date = new java.sql.Date(pickedDate.getDate().getTime());

где pickedDate является объектом JXDatePicker

Эта функция возвращает преобразованную дату SQL из объекта даты java.

Сначала отформатируйте свой java.util.Date. Затем используйте форматированную дату, чтобы получить дату в java.sql.Date

Вот пример преобразования Util Date в Sql date и ya это один из примеров того, что я использую в своем проекте может быть полезно и вам.

Я новичок: после долгой беготни это сработало. Мысль может оказаться полезной

Способ сравнения 2 дат (util.date или sql.date)

попробуйте с этим

Я думаю, что лучший способ, чтобы преобразовать это:

Если вы хотите вставить переменную dt в таблицу SQL, вы можете сделать это:

я использую следующий код пожалуйста попробуйте его

укажите формат нужной даты например «DD-MM_YYYY» или ‘YYYY-mm-dd’ затем используйте тип данных java дата как

тогда он разберет вашу дату

Вы можете использовать этот метод для преобразования утиль дату sql дата,

Я пробовал следующую кодировку, которая работала отлично.

java.util.Date utilDate = новый java.util.Date();
java.sql.Date sqlDate = новый java.sql.Date(utilDate);

Если вы usgin Mysql столбец даты может быть передан строковое представление этой даты

поэтому я использую класс DateFormatter, чтобы отформатировать его, а затем установить его в виде строки в операторе sql или подготовленном операторе

вот иллюстрация кода:

Строка date = converUtilDateToSqlDate(otherTransaction.getTransDate());

//then передайте эту дату в вашем sql заявлении

Java Date and Time

Java Dates

Java does not have a built-in Date >java.time package to work with the date and time API. The package includes many date and time classes. For example:

ClassDescription
LocalDateRepresents a date (year, month, day (yyyy-MM-dd))
LocalTimeRepresents a time (hour, minute, second and milliseconds (HH-mm-ss-zzz))
LocalDateTimeRepresents both a date and a time (yyyy-MM-dd-HH-mm-ss.zzz)
DateTimeFormatterFormatter for displaying and parsing date-time objects

If you don’t know what a package is, read our Java Packages Tutorial.

Display Current Date

To display the current date, import the java.time.LocalDate >now() method:

Example

The output will be:

Display Current Time

To display the current time (hour, minute, second, and milliseconds), import the java.time.LocalTime >now() method:

Example

The output will be:

Display Current Date and Time

To display the current date and time, import the java.time.LocalDateTime >now() method:

Example

The output will be:

Formatting Date and Time

The «T» in the example above is used to separate the date from the time. You can use the DateTimeFormatter >ofPattern() method in the same package to format or parse date-time objects. The following example will remove both the «T» and milliseconds from the date-time:

Example

The output will be:

The ofPattern() method accepts all sorts of values, if you want to display the date and time in a different format. For example:

ValueExampleTryit
yyyy-MM-dd«1988-09-29»Try it »
dd/MM/yyyy«29/09/1988»Try it »
dd-MMM-yyyy«29-Sep-1988»Try it »
E, MMM dd yyyy«Thu, Sep 29 1988»Try it »

COLOR PICKER

HOW TO

SHARE

CERTIFICATES

Report Error

If you want to report an error, or if you want to make a suggestion, do not hesitate to send us an e-mail:

Thank You For Helping Us!

Your message has been sent to W3Schools.

Top Tutorials

Top References

Top Examples

Web Certificates

W3Schools is optimized for learning, testing, and training. Examples might be simplified to improve reading and basic understanding. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using this site, you agree to have read and accepted our terms of use, cookie and privacy policy. Copyright 1999-2020 by Refsnes Data. All Rights Reserved.
Powered by W3.CSS.

Ссылка на основную публикацию
Adblock
detector