Разное

Работа с датой java: Date Time и Calendar в Java. Руководство с примерами

Содержание

Работа с датой и временем


Разбор и вывод на экран даты и времени как правило вызывает затруднения. В J2SE есть несколько классов, облегчающих работу со временем.  Я говорю о классах java.util.Calendar, java.util.Date, java.util.TimeZone и java.text.DateFormat. Для сравнения, профиль MIDP позволяет использовать  только  классы Calendar, Date и TimeZone.  Класс DateFormat не поддерживается ни в какой форме.  Возникает закономерный вопрос,  как управлять выводом на экран  даты и времени.

Ответ кроется в классе javax.microedition.lcdui.DateField, который представляет собой часть высокоуровневого API интерфейса пользователя. DateField это компонент интерактивного пользовательского интерфейса, который позволяет отображать дату, время или все сразу.  Он также  позволяет проводить их редактирование. DateField представляет собой расширение класса Item. Это означает, что этот компонент можно располагать на форме. Таким образом, первым шагом для использовании этого класса будет создание формы и расположение на ней DateField.

 Form f=new Form("A Form");
f.append( df);

Как и любой потомок класса Item, DateField выводится на экран только когда его форма активна. Перевести форму в активное состояние можно вызвав метод Displat.setCurrent.

Класс DateField  определяет два конструктора:

public DateField( String label, int mode);
public DateField( String label, int mode, java.util.TimeZone zone);

Собственно, для отображения даты и времени с помощью DateFields надо задать используемую временную зону. Двухаргументный конструктор использует установленную в телефоне по умолчанию временную зону. Трехаргументный конструктор позволяет вам задать другую зону. Вы не сможете изменить отображаемую временную зону без создание нового DateField.

Поговорим об оставшихся аргументах. Как вы видете, они идентичны в обоих конструкторах. Первый аргумент задает подпись рядом с полем даты, используйте null если не хотите ее использовать. Второй аргумент определяет стиль поля. Всего доступно три варианта:

public static final intDATE=1;
public static final intTIME=2;
public static final int DATE_TIME=3;

Стиль определяет, что должно выводиться в поле: только дата, только время или все вместе. Вы можете изменить стиль вывода в любое время, вызвав метод setInputMode.

Когда вы создаете  новый экземпляр DateField, то не имеете возможность задать дату или время. Следующий код выводит неинициализированную дату.

 Display display=....;// initialized elsewhere
Form f=new Form("An Empty Date");
DateField df=new DateField("Date:",
DateField.DATE);
f.append( df);
display.setCurrent( f);

Чтобы инициализировать дату или время, вызовите метод setDate  и передайте инициализированному объекту java.util.Date исправленное значение.

 Calendar c= Calendar.getInstance();
c.set( Calendar.MONTH, Calendar.OCTOBER);
c.set( Calendar.DAY_OF_MONTH,18);
c.set( Calendar.YEAR,1996);
c.set( Calendar.HOUR_OF_DAY,16);
c.set( Calendar.MINUTE,39);
c.set( Calendar.SECOND,45);
c.set( Calendar.MILLISECOND,0);
 
Date moment= c.getTime();
DateField df=new DateField(null,
DateField.DATE_TIME);
df.setTime( moment);

Объект Date возвращает число миллисекунд прошедших с полночи  1 января 1970 года до текущего момента. Ниже показано, как используя Calendar создать Date.

Заметьте, что DateField в стиле TIME требует порцию даты чтобы определить 1 января 1970. Ниже приводятся два полезных метода для очистки порции даты и слияния двух Date объектов в единый объект.

public staticDate clearDate(Date d){
Calendar c= Calendar.getInstance();
c.setTime( d);
c.set( Calendar.MONTH, Calendar.JANUARY);
c.set( Calendar.DAY_OF_MONTH,1);
c.set( Calendar.YEAR,1970);
return c.getTime();
}
 
public staticDate combineDateTime(
Datedate,Datetime){
Calendar cd= Calendar.getInstance();
Calendar ct= Calendar.getInstance();
 
cd.setTime(date);
ct.setTime(time);
 
ct.set( Calendar.MONTH,
cd.get( Calendar.MONTH));
ct.set( Calendar.DAY_OF_MONTH,
cd.get( Calendar.DAY_OF_MONTH));
ct.set( Calendar.YEAR,
cd.get( Calendar.YEAR));
 
return ct.getTime();
}
 
 

Когда Вы манипулируете с датой при помощи класса Calendadr, Date сохраняет свое значение.

После того как DateField отображен, система позволяет пользователю редактировать время в соответствии со стилем. Если Вам необходимо получить новое значение даты или времени, вызовите метод getDate:

 DateField df=....;
Date editedDate= df.getDate();

Ниже приведен простой MIDlet, который позволяет Вам видеть и редактировать дату и время, используя все три стиля.                                           

import java.util.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
 
/**
* Демонстрация редактирования даты/времени при помощи класса
* DateField.
*/
 
publicclass DateFieldTestextends MIDlet{
 
private Display display;
 
// Определяем объекты меню.
 
private Command exitCommand=
new Command("Exit", Command.EXIT,1);
private Command okCommand=
new Command("OK", Command.OK,1);
private Command cancelCommand=
new Command(
"Cancel", Command.CANCEL,1);
 
public DateFieldTest(){
}
 
protected void destroyApp( boolean unconditional)
throws MIDletStateChangeException{
exitMIDlet();
}
 
protected void pauseApp(){
}
 
protected void startApp()
throws MIDletStateChangeException{
if( display==null){// first time called. ..
initMIDlet();
}
}
 
private void initMIDlet(){
display= Display.getDisplay( this);
testList=new TestList();
display.setCurrent( testList);
}
 
public void exitMIDlet(){
notifyDestroyed();
}
 
//Возвращаем дату и время с 1 января 1970 года
 
public staticDate clearDate(Date d){
Calendar c= Calendar.getInstance();
c.setTime( d);
c.set( Calendar.MONTH, Calendar.JANUARY);
c.set( Calendar.DAY_OF_MONTH,1);
c.set( Calendar.YEAR,1970);
return c.getTime();
}
 
// Совмещаем дату и время.
 
public staticDate combineDateTime(Datedate,
Datetime){
Calendar cd= Calendar.getInstance();
Calendar ct= Calendar.getInstance();
 
cd.setTime(date);
ct.setTime(time);
 
ct.set( Calendar.MONTH,
cd.get( Calendar.MONTH));
ct.set( Calendar.DAY_OF_MONTH,
cd.get( Calendar.DAY_OF_MONTH));
ct.set( Calendar.YEAR,
cd.get( Calendar.YEAR));
 
return ct.getTime();
}
 
// Определяем используемый стиль даты
 
static final String[] testLabels={
"Current date",
"Current time",
"Current date/time",
"Edit date",
"Edit time",
"Edit date/time",
};
 
private TestList testList;
privateDate editDate;
 
//
// Выводим список действий
//
 
class TestListextendsList
implements CommandListener{
public TestList(){
super("DateField Tests", IMPLICIT,
testLabels,null);
addCommand( exitCommand);
setCommandListener( this);
}
 
public void commandAction( Command c,
Displayable d){
if( c== exitCommand){
exitMIDlet();
}elseif( c==List.
SELECT_COMMAND){   // Figure out which date to display // and what the input mode is   int which= getSelectedIndex(); String label= getString( which); int mode=( which%3)+1; boolean save=( which>2);   display.setCurrent( new Edit( save, label, mode)); } } }   // // Редактирование даты/времени и сохранение результата. //   class Editextends Form implements CommandListener{   public Edit( boolean save, String label, int mode){   super( label); this.save= save;   Date d= editDate;   if(!save){ d=newDate(); }   dateField=new DateField(null, mode); append( dateField);   if( d!=null){ if( mode== DateField.TIME){ d= clearDate( d); }   dateField.setDate( d); }   addCommand( okCommand);   if( save){ addCommand( cancelCommand); }   setCommandListener( this); }   public void commandAction( Command c, Displayable d){ Alert alert=null; Datedate= dateField.getDate();   if( save&&date!=null&& c == okCommand){ if( editDate!=null){ int mode= dateField.getInputMode(); if( mode== DateField.
DATE){ editDate= combineDateTime( date, editDate); }elseif( mode== DateField.TIME){ editDate= combineDateTime( editDate,date); }else{ editDate=date; } }else{ editDate=date; }   Calendar cal= Calendar.getInstance(); cal.setTime( editDate);   alert=new Alert("New date/time"); alert.setString( "The saved date/time is now "+ cal); alert.setTimeout( Alert.FOREVER); }   if( alert!=null){ display.setCurrent( alert, testList); }else{ display.setCurrent( testList); } }   private DateField dateField; private boolean save; } }     -----------   publicclass MultiAlertextends MIDlet{   Display display; Command exitCommand=new Command("Exit", Command.EXIT, 1); public MultiAlert(){ display= Display.getDisplay( this); router=new AlertRouter( display);   timer1.schedule(new AlertTrigger("Alert 1", "This is alert #1"),5000,10000); timer2.schedule(new AlertTrigger("Alert 2", "This is alert #2"),5000,7000); timer3.schedule(new AlertTrigger("Alert 3", "This is alert #3"),5000,9000); }

Автор оригинала Eric Giguere.
Перевод: Arix


Golang time и Golang date: форматирование даты и времени в Go

В языке программирования Golang для выполнения операций над временем используется стандартный пакет time. Используя его, можно получить текущие параметры времени и даты, отформатировать дату в строку, создать таймер либо бегущую строку, cконвертировать временные зоны. В этой статье пойдёт рассказ о форматировании даты в строку, о парсинге даты в Golang, о популярных шаблонах для даты и времени и о том, какие существуют исключительные случаи во время работы с датой и временем (time) в Golang.

В качестве шаблона в языке программирования Go используют фиксированные значения времени либо даты, а не особые символы, такие как %d-%b-%Y. В целях форматирования задействуется метод Format:

    func (t Time) Format(layout string) string

Для парсинга даты применяют функцию time.Parse:

    func Parse(layout, value string) (Time, error)

Чтобы описать формат значения времени, нужен специальный параметр макета layout. Он д. б. референтной датой — Mon Jan 2 15:04:05 MST 2006, которая отформатирована так же, как и ожидаемое для форматирования значение.

Парсинг даты

Для парсинга «2017-08-31» применим шаблон строки «2006-01-02» (это эквивалентно yyyy-mm-dd референтной «магической» даты).

Может возникнуть справедливый вопрос: а что же такого магического есть в Mon Jan 2 15:04:05 MST 2006? Давайте посмотрим на шаблон в другом порядке:

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

Форматируем даты в строку

Если нужно получить текстовое представление значения времени, то можно ожидать выполнения определенного форматирования. В пакете time есть тип Time, позволяющий создавать вывод string в указанном формате. Существует ряд правил относительно того, как правильно это выполнять. Наиболее важные моменты следует рассмотреть:

  1. Давайте создадим файл format. go с определённым содержанием:
  2. Теперь запустим код с помощью go run format.go.
  3. И увидим результат:
tTime is: 2017/3/5
The time is: 08:05
The time is: Sun, 05 Mar 2017 08:05:02 UTC
tTime is: 2017/3/ 5
tTime is: 2017/03/05
tTime is: 08:05:02.00
tTime is: 08:05:02
The time is up: 08:05AM

Тип Time в пакете time предоставляет нам метод Format, необходимый для форматирования вывода в строку. Также пакет time содержит ряд предварительно установленных форматов (в качестве примера можно привести time.Kitchen). Чтобы ознакомиться с константами этого пакета, можно открыть их в официальной документации. Если же интересует более подробная информация как о предварительно определённых форматах, так и об опциях форматирования, получить её можно тоже в официальной документации, но уже для пакета time.

Чтобы определить макет вывода, в Go используется референтное значение времени Jan 2 15:04:05 2006 MST.

Популярные шаблоны

Ниже будут представлены таблицы с шаблонами для даты, времени, даты и времени.

Об исключительных случаях

Теперь следует перечислить особые случаи, с которыми, используя пакет time, справиться нельзя:

  1. Случай № 1. Нет возможности уточнить, что час должен быть представлен в 24-часовом временном формате без начального нуля.
  2. Случай № 2. Нет возможности указать полночь как 24:00 вместо 00:00. Типичное применение для этого — давать часы работы, которые заканчиваются в полночь, по типу 07:00-24:00.
  3. Случай № 3. Нет возможности указать время, которое содержит дополнительную високосную секунду: 23:59:60. На деле временной пакет предполагает использование григорианского календаря без високосных секунд.

Как получить timestamp в Golang?

Если интересует метка времени (timestamp), следует использовать time.Now, а также один из time.Unix либо time.UnixNano. Нижеследующий код можно проверить в любом онлайн-компиляторе Go:

package main

import (
    "fmt"
    "time"
)

func main() {

    // местное время (текущее)
now := time. Now()      

// число секунд с 1 января 1970 года по Гринвичу (UTC)
sec := now.Unix() 

// число наносекунд с 1 января 1970 года 
// по Гринвичу (UTC)
nsec := now.UnixNano() 

fmt.Println(now)  // time.Time
fmt.Println(sec)  // int64
fmt.Println(nsec) // int64
}

Вывод в терминал на момент написания статьи был следующим:

2020-09-25 17:29:56.611382982 +0000 UTC m=+0.000159607                                                                        
1601054996                                                                                                                    
1601054996611382982    

Вот и всё, если хотите получить более продвинутые знания по программированию на Golang, записывайтесь на курсы в OTUS!

По материалам: • https://golangs.org/date-time-layout-2006-01-02; • https://golang-blog.blogspot.com/2020/04/format-date-time-in-golang.html; • https://golang-blog.blogspot.com/2020/04/timestamp-in-golang. html.

упражнения с датой, временем и календарем

script1adsense2code

script1adsense3code

Упражнения с датой, временем и календарем на Java [37 упражнений с решением]

1. Напишите программу на Java для создания объекта Date с использованием класса Calendar. Перейти к редактору

Нажмите меня, чтобы увидеть решение

2. Напишите Java-программу для получения и отображения информации (год, месяц, день, час, минута) календаря по умолчанию. Перейти к редактору

Нажмите меня, чтобы увидеть решение

3. Напишите программу на Java, чтобы получить максимальное значение года, месяца, недели, даты из текущей даты календаря по умолчанию. Перейти к редактору

Нажмите меня, чтобы увидеть решение

4. Напишите программу на Java, чтобы получить минимальное значение года, месяца, недели, даты из текущей даты календаря по умолчанию. Перейти к редактору

Нажмите меня, чтобы увидеть решение

5. Напишите программу на Java, чтобы узнать текущее время в Нью-Йорке. Перейти к редактору

Нажмите меня, чтобы увидеть решение

6. Напишите программу на Java, чтобы получить текущую полную дату и время. Перейти к редактору

Нажмите меня, чтобы увидеть решение

7. Напишите программу на Java, чтобы узнать последний день текущего месяца. Перейти к редактору

Нажмите меня, чтобы увидеть решение

8. Напишите программу на Java, чтобы получить последнюю дату месяца. Перейти к редактору

Нажмите меня, чтобы увидеть решение

9. Напишите программу на Java для расчета первого и последнего дня каждой недели. Перейти к редактору

Нажмите меня, чтобы увидеть решение

10. Напишите программу на Java, чтобы получить имя первого и последнего дня месяца. Перейти к редактору

Нажмите меня, чтобы увидеть решение

11. Напишите программу на Java, чтобы узнать количество дней в месяце. Перейти к редактору

Нажмите меня, чтобы увидеть решение

12. Напишите программу на Java, чтобы получить локализованное название дня в неделю. Перейти к редактору

Нажмите меня, чтобы увидеть решение

13. Напишите программу на Java, чтобы получить день недели с определенной датой. Перейти к редактору

Нажмите меня, чтобы увидеть решение

14. Напишите программу на Java, чтобы узнать текущее местное время. Перейти к редактору

Нажмите меня, чтобы увидеть решение

15. Напишите программу на Java, чтобы добавить несколько часов к текущему времени. Перейти к редактору

Нажмите меня, чтобы увидеть решение

16. Напишите программу на Java, чтобы получить дату через 2 недели. Перейти к редактору

Нажмите меня, чтобы увидеть решение

17. Напишите программу на Java, чтобы получить дату до и после 1 года сравнения с текущей датой. Перейти к редактору

Нажмите меня, чтобы увидеть решение

18. Напишите программу на Java, чтобы проверить, является ли год високосным или нет. Перейти к редактору

Нажмите меня, чтобы увидеть решение

19. Напишите программу на Java, чтобы получить год и месяцы между двумя датами. Перейти к редактору

Нажмите меня, чтобы увидеть решение

20. Напишите программу на Java, чтобы получить текущую метку времени. Перейти к редактору

Нажмите меня, чтобы увидеть решение

21. Напишите программу на Java, чтобы узнать текущее время во всех доступных часовых поясах. Перейти к редактору

Нажмите меня, чтобы увидеть решение

22. Напишите программу на Java, чтобы получить даты за 10 дней до и после сегодняшнего дня. Перейти к редактору

Нажмите меня, чтобы увидеть решение

23. Напишите программу на Java, чтобы получить месяцы, оставшиеся в году. Перейти к редактору

Нажмите меня, чтобы увидеть решение

24. Напишите программу на Java для отображения дат в следующих форматах. Перейти к редактору

Образец формата:

 Формат по умолчанию LocalDate = 2016-09-16                                                                        
16 :: Сентябрь :: 2016                                                                                                 
Формат по умолчанию LocalDateTime = 2016-09-16T11: 46: 01.455                                                       
16 :: сен :: 2016 11 :: 46 :: 01                                                                                      
Формат по умолчанию Instant = 2016-09-16T06: 16: 01.456Z                                                            
Формат по умолчанию после разбора = 2014-04-27T21: 39: 48

Нажмите меня, чтобы увидеть решение

25. Напишите программу на Java, чтобы получить информацию о текущем / данном году. Перейти к редактору

Образец формата:

 Пример вывода:
Текущий год: 2001                                                                                            
Является ли текущий год високосным? ложный                                                                              
Продолжительность года: 365 дней

Нажмите меня, чтобы увидеть решение

26. Напишите программу на Java, чтобы получить информацию о текущем / заданном месяце. Перейти к редактору

Образец формата:

 Пример вывода:
Целочисленное значение текущего месяца: 2                                                                         
Продолжительность месяца: 28                                                                                       
Максимальная продолжительность месяца: 29                                                                               
Первый месяц квартала: ЯНВАРЬ

Нажмите меня, чтобы увидеть решение

27. Напишите программу на Java, чтобы получить информацию о данном времени. Перейти к редактору

Нажмите меня, чтобы увидеть решение

28. Напишите программу на Java для отображения информации о дате и времени раньше, чем через несколько часов и минут от текущей даты и времени. Перейти к редактору

Нажмите меня, чтобы увидеть решение

29. Напишите программу на Java для преобразования строки в дату. Перейти к редактору

Нажмите меня, чтобы увидеть решение

30. Напишите программу на Java, чтобы вычислить разницу между двумя датами (год, месяцы, дни). Перейти к редактору

Нажмите меня, чтобы увидеть решение

31. Напишите программу на Java, чтобы вычислить разницу между двумя датами (часы, минуты, милли, секунды и нано). Перейти к редактору

Нажмите меня, чтобы увидеть решение

32. Напишите программу на Java, чтобы рассчитать свой возраст. Перейти к редактору

Нажмите меня, чтобы увидеть решение

33. Напишите программу на Java, чтобы получить следующую и предыдущую пятницу. Перейти к редактору

Нажмите меня, чтобы увидеть решение

34. Напишите программу на Java, чтобы получить сегодняшнюю дату в полночь. Перейти к редактору

Нажмите меня, чтобы увидеть решение

35. Напишите программу на Java для извлечения даты, времени из строки даты. Перейти к редактору

Нажмите меня, чтобы увидеть решение

36. Напишите программу на Java для преобразования метки времени Unix в дату в Java. Перейти к редактору

Нажмите меня, чтобы увидеть решение

37. Напишите программу на Java, чтобы найти секунды с 1970 года. Перейти к редактору

Нажмите меня, чтобы увидеть решение

Редактор Java-кода

Еще не все !

Не отправляйте решение вышеупомянутых упражнений здесь, если вы хотите внести вклад, перейдите на соответствующую страницу упражнения.

Как использовать Java 8 Date API в JPA

Как все знают, в Java 8 появились удобные классы для работы с датами. Для реализации этого Oracle пригласил разработчика Joda Time Стивена Колборна. Историю об этом можно прочитать на сайте Oracle — http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html.

Сначала я тоже порадовался, что появилось такое удобное API из коробки. Но как всегда Oracle добавил свою ложку дёгтя в код.

Но Стивен, видимо, очень не любил старые классы для работы с датами в Java до версии 8. Оказалось, что использовать старые и новые API вместе практически невозможно без магических преобразований — stackoverflow бурлит вопросами о конвертации Date в LocalDate и им подобным.

Поэтому пришлось в проекте, в котором используется Date — продолжать использовать его, а в новых можно переходить на Java8.

Окей. А как насчёт работы с JPA? Вроде всё гладко кроме одного НО.

Аннотация

Может работать только с Date. Иначе вы будете получать ошибку:

AnnotationException @Temporal should only be set on a java.util.Date or java.util.Calendar property

Поэтому чтобы JPA начал работать с Java 8 LocalDateTime / LocalTime / LocalDate нужно скачать библиотеку hibernate-java8. Я не уверен насчёт остальных реализаций, потому что у себя всегда пользуюсь hibernate’ом.

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-java8</artifactId>
    <version>${hibernate.version}</version>
</dependency>

<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-java8</artifactId> <version>${hibernate.version}</version> </dependency>

После чего, для всех полей, который должны быть датой нужно прописать тип поля из этой библиотеки:

@Column
@Type(type = "org.hibernate. type.LocalDateTimeType")
private LocalDateTime lastUpdated;

@Column @Type(type = «org.hibernate.type.LocalDateTimeType») private LocalDateTime lastUpdated;

И всё, после этого hibernate сможет работать с этой датой нормально

Date.parse() — JavaScript | MDN

Метод Date.parse() разбирает строковое представление даты и возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC.

Прямой вызов:

Date.parse(dateString)

Неявный вызов:

new Date(dateString)

Параметры

dateString
Строковое представление даты из RFC2822 (на английском, на русском) или ISO 8601. Могут использоваться и другие форматы, но результаты в таком случае будут непредсказуемые.

Метод parse() принимает строку с датой (например, "Dec 25, 1995") и возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC. Этот метод полезен для установки значения даты из строкового значения, например, в сочетании с методом setTime() о объектом Date.

По данному строковому представлению времени метод parse() возвращает значение времени. Он принимает синтаксис даты из RFC2822 / IETF (RFC2822 раздел 3.3 — на английском, на русском), например, "Mon, 25 Dec 1995 13:30:00 GMT". Он понимает аббревиатуры континентальных часовых поясов США, но для общего пользования используйте смещение часовых поясов, например, "Mon, 25 Dec 1995 13:30:00 +0430" (4 часа 30 минут к востоку от Гринвичского меридиана). Если часовой пояс не определён и строка является форматом ISO, распозначаемым ES5, предполагается, что часовым поясом является UTC. GMT и UTC считаются эквивалентными. Местный часовой пояс используется для интерпретации аргумента в формате RFC2822 из раздела 3.3 (на английском, на русском) (или в любом другом формате, не распознаваемым как ISO 8601 в ES5), если он не содержит информации о часовом поясе.

Поддержка формата ISO-8601 в ECMAScript 5

Строка с датой и временем может быть в формате ISO 8601. Например, могут быть переданы и разобраны строки "2011-10-10" (только дата) или "2011-10-10T14:48:00" (дата и время). Для интерпретации аргументов в формате ISO 8601, не содержащих информацию о часовом поясе, используется часовой пояс UTC.

Хотя во время разбора строки с датой и используется спецификатор часового пояса, возвращаемое значение всегда содержит количество миллисекунд между 1 января 1970 года 00:00:00 по UTC и моментом времени, представленным аргументом.

Поскольку метод parse() является статическим методом объекта Date, вы всегда должны использовать его как Date.parse().

Различия в предполагаемом часовом поясе

Для строки даты "March 7, 2014", метод parse() будет предполагать местный часовой пояс, но если строка дана в формате ISO, например "2014-03-07", он будет предполагать, что часовой пояс равен UTC. Поэтому объекты Date, созданные из этих строк, если в системе местный часовой пояс не равен UTC, будут представлять разные моменты времени. Это значит, что две строки с датами, которые выглядят одинаковыми, могут дать два разных значения в зависимости от формата преобразуемой строки.

Откат к зависимым от реализации форматам даты

В спецификации ECMAScript говорится: если строка не соответствует стандартному формату, функция может откатиться к любой зависимой от реализации эвристике, либо к зависимому от реализации алгоритму разбора. Нераспознанные строки, либо даты, содержащие недопустимые значения элементов в строках формата ISO, должны при вызове Date.parse() возвращать NaN.

Однако, недопустимые значения в строке даты, не распознанные как формат ISO, как определено ES5 могут возвращать, а могут и не возвращать NaN в качестве результата, в зависимости от браузера и предоставленных значений, например:


new Date('23/25/2014');

будет рассматриваться как местная дата 25 ноября 2015 года в Firefox 30 и как недопустимая дата в Safari 7. Однако, если строка распознана как строка в формате ISO и она содержит недопустимые значения, метод вернёт NaN во всех браузерах, совместимых с ES5:


new Date('2014-25-23').toISOString();

Реализация эвристики SpiderMonkey может быть найдена в файле jsdate.cpp. Строка "10 06 2014" является примером не подходящей под формат ISO и поэтому её разбор откатывается на пользовательскую подпрограмму. Так же смотрите эту грубую схему работы разбора строки.

new Date('10 06 2014');

будет рассматриваться как местная дата 6 октября 2014 года, а не 10 июня 2014 года. Другие примеры:

new Date('foo-bar 2014').toString();


Date.parse('foo-bar 2014');

Пример: использование метода

Date.parse()

Если переменная IPOdate содержит существующий объект Date, она может быть установлена в 9 августа 1995 года (по местному времени) следующим способом:

IPOdate. setTime(Date.parse('Aug 9, 1995'));

Ещё несколько примеров разбора нестандартных строк с датами:

Date.parse('Aug 9, 1995');

Вернёт 807937200000 в часовом поясе GMT-0300, и другие значения в других часовых поясах, так как поскольку строка не определяет часовой пояс и не находится в формате ISO, то часовой пояс по умолчанию равен местному часовому поясу.

Date.parse('Wed, 09 Aug 1995 00:00:00 GMT');

Вернёт 807926400000 вне зависимости от местного часового пояса, поскольку предоставлен спецификатор GMT (всемирное координированное время).

Date.parse('Wed, 09 Aug 1995 00:00:00');

Вернёт 807937200000 в часовом поясе GMT-0300, и другие значения в других часовых поясах, так как поскольку строка не определяет часовой пояс и не находится в формате ISO, то часовой пояс по умолчанию равен местному часовому поясу.

Date.parse('Thu, 01 Jan 1970 00:00:00 GMT');

Вернёт 0 вне зависимости от местного часового пояса, поскольку предоставлен спецификатор GMT (всемирное координированное время).

Date.parse('Thu, 01 Jan 1970 00:00:00');

Вернёт 14400000 в часовом поясе GMT-0400, и другие значения в других часовых поясах, так как поскольку строка не определяет часовой пояс и не находится в формате ISO, то используется местный часовой пояс.

Date.parse('Thu, 01 Jan 1970 00:00:00 GMT-0400');

Вернёт 14400000 вне зависимости от местного часового пояса, поскольку предоставлен спецификатор GMT (всемирное координированное время).

ВозможностьChromeFirefox (Gecko)Internet ExplorerOperaSafari
Базовая поддержка(Да)(Да)(Да)(Да)(Да)
Формат ISO 8601(Да)4.0 (2.0)9(Да)(Да)
ВозможностьAndroidChrome для AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Базовая поддержка?(Да)(Да)???
Формат ISO 8601?(Да)(Да)?(Да)(Да)

Python | Работа с датой и временем с использованием панд

При работе с данными очень часто встречаются данные временных рядов. Панды — очень полезный инструмент при работе с данными временных рядов.

Панды предоставляют другой набор инструментов, с помощью которых мы можем выполнять все необходимые задачи с данными даты и времени. Давайте попробуем разобраться с примерами, обсуждаемыми ниже.

Код № 1: Создайте фрейм данных дат

import pandas as pd

  

data = pd.date_range('1/1/2011', periods = 10, freq ='H')

  
data

Выход:

Код № 2: Создать диапазон дат и показать основные функции

data = pd.date_range('1/1/2011', periods = 10, freq ='H')

  

x = datetime. now()

x.month, x.year

Выход:

(9, 2018)

Функции даты и времени можно разделить на две категории. Первый момент времени в периоде, а второй — время, прошедшее с определенного периода. Эти функции могут быть очень полезны для понимания закономерностей в данных.

Разделите данную дату на особенности —

pandas.Series.dt.year возвращает год даты и времени.
pandas.Series.dt.month возвращает месяц даты и времени.
pandas.Series.dt.day возвращает день даты и времени.
pandas.Series.dt.hour возвращает час даты и времени.
pandas.Series.dt.minute возвращает минуты даты и времени.

Смотрите все datatime свойства из здесь .

Код № 3: разбить данные и время на отдельные функции

rng = pd. DataFrame()

rng['date'] = pd.date_range('1/1/2011', periods = 72, freq ='H')

  

rng[:5]

  

rng['year'] = rng['date'].dt.year

rng['month'] = rng['date'].dt.month

rng['day'] = rng['date'].dt.day

rng['hour'] = rng['date'].dt.hour

rng['minute'] = rng['date']. dt.minute

  

rng.head(3)

Выход:

Код # 4: Чтобы узнать текущее время, используйте Timestamp.now (), а затем преобразуйте временную метку в datetime и получите прямой доступ к году, месяцу или дню.

t = pandas.tslib.Timestamp.now()

t

Timestamp('2018-09-18 17:18:49.101496')
datetime.datetime(2018, 9, 18, 17, 18, 49, 101496)


t.year
t.month
t.day
t.hour
t.minute
t.second

2018
8
25
15
53

Давайте проанализируем эту проблему на реальном наборе данных.

Выход:

df['Time'] = pd.to_datetime(df.Time)

  
df.head()

City                       object
Colors Reported            object
Shape Reported             object
State                      object
Time               datetime64[ns]
dtype: object
0    22
1    20
2    14
3    13
4    19
Name: Time, dtype: int64


df.Time.dt.weekday_name.head()

0     Sunday
1     Monday
2     Sunday
3     Monday
4    Tuesday
Name: Time, dtype: object


df.Time.dt.dayofyear.head()

0    152
1    181
2     46
3    152
4    108
Name: Time, dtype: int64

Рекомендуемые посты:

Python | Работа с датой и временем с использованием панд

0. 00 (0%) 0 votes

Как я могу получить дату без времени в Java?

есть ли другой способ, кроме этих двух?

Да, есть.

LocalDate.now( 
    ZoneId.of( "Pacific/Auckland" ) 
)

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

аналогично Joda Времени, java.времени LocalDate класс для представления значения только для даты без времени суток и без часового пояса.

отметим, что часовой пояс имеет решающее значение для определения конкретной даты. В полночь в Париже, например, дата все еще «вчера» в Монреале.

LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) ) ;

по умолчанию, java.время использует ISO 8601 стандарт при создании строкового представления даты или дата-значение времени. (Еще одно сходство с Джодой-время.) Так просто позвоните toString() для создания текста типа 2015-05-21.

String output = today.toString() ; 

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

The Joda-Time, теперь режим обслуживания, советует миграцию в java.время классы.

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

где получить java.время занятий?

  • Java SE 8,Java SE 9, и позже
    • встроенный.
    • часть стандартного Java API с комплектной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • большая часть java. время функциональность обратно портирована на Java 6 & 7 в ThreeTen-Backport.
  • Android
    • более поздние версии Android bundle реализации java.время занятий.
    • для более ранних Android, ThreeTenABP проект приспосабливается ThreeTen-Backport (упоминалось выше). Видеть как использовать ThreeTenABP….

The ThreeTen-Extra проект расширяет java.время с дополнительными занятиями. Этот проект является испытательным полигоном для возможных будущих дополнений к java.время. Вы можете найти некоторые полезные классы, такие как Interval,YearWeek,YearQuarter и больше.

Дата

— JavaScript | MDN

JavaScript Date Объекты представляют отдельный момент времени в независимом от платформы формате. Date Объекты содержат Number , которое представляет миллисекунды с 1 января 1970 года по всемирному координированному времени.

Примечание. TC39 работает над Temporal, новым API даты и времени. Подробнее об этом читайте в блоге Игалия. Он еще не готов к производственному использованию!

Эпоха ECMAScript и отметки времени

Дата JavaScript в основном определяется как количество миллисекунд, прошедших с полуночи 1 января 1970 года по всемирному координированному времени.Эта дата и время не совпадают с эпохой UNIX (количество секунд, прошедших с полуночи 1 января 1970 года по всемирному координированному времени), которая является преобладающим базовым значением для значений даты и времени, записанных компьютером.

Примечание: Важно помнить, что, хотя значение времени в основе объекта Date — это UTC, все основные методы получения даты и времени или их компонентов работают в локальном часовом поясе (т. Е. Хост-системе). и смещение.

Следует отметить, что максимальное значение Date отличается от максимального безопасного целого числа ( Number. MAX_SAFE_INTEGER равно 9 007 199 254 740 991). Вместо этого в ECMA-262 определено, что максимум ± 100000000 (сто миллионов) дней относительно 1 января 1970 г. по всемирному координированному времени (то есть 20 апреля 271821 г. до н.э. ~ 13 сентября 275760 г. н.э.) может быть представлен стандартом. Объект Date (эквивалент ± 8 640 000 000 000 000 миллисекунд).

Преобразование формата даты и часового пояса

Существует несколько доступных методов для получения даты в различных форматах, а также для преобразования часового пояса.Особенно полезны функции, которые выводят дату и время в формате всемирного координированного времени (UTC), глобального стандартного времени, определенного стандартом мирового времени. (Это время исторически известно как Среднее время по Гринвичу , так как UTC находится вдоль меридиана, который включает Лондон — и близлежащий Гринвич — в Соединенном Королевстве.) Устройство пользователя показывает местное время.

Помимо методов для чтения и изменения отдельных компонентов локальной даты и времени (таких как getDay () и setHours () ), существуют также версии тех же методов, которые считывают дату и время и управляют ими с помощью UTC (например, getUTCDay () и setUTCHours () ).

Дата ()
При вызове в качестве функции возвращает строковое представление текущей даты и времени точно так же, как new Date (). ToString () .
новая Дата ()
При вызове в качестве конструктора возвращает новый объект Date .
Дата. Сейчас ()
Возвращает числовое значение, соответствующее текущему времени — количество миллисекунд, прошедших с 1 января 1970 г., 00:00:00 UTC, без учета дополнительных секунд.
Date.parse ()
Анализирует строковое представление даты и возвращает количество миллисекунд с 1 января 1970 года, 00:00:00 UTC, с игнорированием дополнительных секунд.

Примечание: Разбор строк с помощью Date.parse категорически не рекомендуется из-за различий и несоответствий браузеров.

Дата.UTC ()
Принимает те же параметры, что и самая длинная форма конструктора (например, от 2 до 7), и возвращает количество миллисекунд с 1 января 1970 года, 00:00:00 UTC, с игнорированием дополнительных секунд.

Несколько способов создания объекта Date

В следующих примерах показано несколько способов создания дат JavaScript:

Примечание. Разбор строк даты с помощью конструктора Date Date.parse , они эквивалентны) категорически не рекомендуется из-за различий и несогласованности браузеров.

  пусть сегодня = новая дата ()
let birthday = new Date ('17 декабря 1995 г. 03:24:00')
пусть день рождения = новая дата ('1995-12-17T03: 24: 00')
пусть день рождения = новая дата (1995, 11, 17)
пусть день рождения = новая дата (1995, 11, 17, 3, 24, 0)
пусть день рождения = новая дата (628021800000)
  

Чтобы получить дату, месяц и год или время

  let [month, date, year] = new Date ().toLocaleDateString ("en-US"). split ("/")
let [час, минута, секунда] = new Date (). toLocaleTimeString ("en-US"). split (/: | /)  

Двузначное отображение года на 1900–1999

Значения от 0 до 99 карта с 1900 по 1999 . Все остальные значения являются фактическим годом.

Для создания и получения дат между 0 и 99 годами Date.prototype.setFullYear () и Date.prototype.Следует использовать методы getFullYear () .

  let date = new Date (98, 1)


date.setYear (98)

date.setFullYear (98)
  

Расчет прошедшего времени

В следующих примерах показано, как определить время, прошедшее между двумя датами JavaScript в миллисекундах.

Из-за разной продолжительности дней (из-за перехода на летнее время), месяцев и лет, выражение прошедшего времени в единицах, превышающих часы, минуты и секунды, требует решения ряда проблем и требует тщательного изучения перед попыткой.

 
let start = Date.now ()


doSomethingForALongTime ()
let end = Date.now ()
let elapsed = end - начало
  
 
пусть начало = новая дата ()


doSomethingForALongTime ()
let end = new Date ()
let elapsed = end.getTime () - start.getTime ()
  
 
function printElapsedTime (fTest) {
  пусть nStartTime = Date.now (),
      vReturn = fTest (),
      nEndTime = Date.now ()

  console.log (`Прошедшее время: $ {String (nEndTime - nStartTime)} миллисекунды`)
  возврат vReturn
}

пусть yourFunctionReturn = printElapsedTime (yourFunction)
  

Получить количество секунд с момента появления ECMAScript Epoch

  let seconds = Math.этаж (Date.now () / 1000)
  

В этом случае важно возвращать только целое число, поэтому простое деление не подходит. Также важно возвращать только фактически прошедшие секунды. (Вот почему этот код использует Math.floor () , а , а не Math.round () .)

Таблицы BCD загружаются только в браузере

Как сравнивать даты в Java

Часто требуется сравнивать даты при работе на Java или любом другом языке программирования. Сравнение дат — это простая, но запутанная (по крайней мере, для меня) задача, которую стоит изучить, учитывая, сколько раз вы будете сравнивать разные даты в Java.

Из этой статьи вы узнаете, как сравнивать две даты в Java, используя как новые API даты и времени Java 8, так и устаревшие Date и Calendar API.

Java 8 Дата и время API

Java 8 представила совершенно новый API даты и времени (классы в пакете java.time. * ), чтобы исправить недостатки старого API. Новый API-интерфейс является потокобезопасным, простым в использовании и предоставляет набор служебных методов для выполнения различных задач, связанных с датой и временем.

Java 8 new date and time API предоставляет следующие методы для сравнения двух экземпляров дат:

  • isAfter () — Вернуть true , если эта дата позже указанной даты.
  • isBefore () — Вернуть true , если эта дата раньше указанной даты.
  • isEqual () — Вернуть true , если эта дата равна указанной дате.
  • compareTo () — возвращает значение компаратора: отрицательное, если меньше, положительное, если больше.

Давайте посмотрим на примеры, в которых используются вышеуказанные методы для сравнения новых экземпляров API даты и времени.

Сравнение экземпляров

LocalDate

Экземпляр LocalDate представляет дату в формате ISO-8601 (гггг-ММ-дд) без времени. В Java 8 и выше дата выражается через LocalDate . В отличие от старого доброго Date , он не хранит информацию о времени или часовом поясе.

Следующий пример демонстрирует, как вы можете проанализировать две строки на экземпляры LocalDate , а затем сравнить их, чтобы увидеть, были ли они до, равны или после друг друга:

  LocalDate date1 = LocalDate.синтаксический анализ («2018-04-12»);
LocalDate date2 = LocalDate.parse ("2019-07-17");


System.out.println (date1 + "is BEFORE" + date2 + ":" + date1.isBefore (date2));
System.out.println (date1 + "is AFTER" + date2 + ":" + date1.isAfter (date2));
System.out.println (date1 + "РАВНО" + date2 + ":" + date1.isEqual (date2));
  

Приведенный выше код напечатает на консоли следующее:

  2018-04-12 ДО 17.07.2019: верно
2018-04-12 - ПОСЛЕ 2019-07-17: ложь
2018-04-12 РАВНО 2019-07-17: false
  

Давайте посмотрим на другой пример, который использует compareTo () для сравнения двух экземпляров LocalDate :

  LocalDate date1 = LocalDate.of (2018, Месяц, 12 ИЮЛЯ);
LocalDate date2 = LocalDate.of (2016, Месяц, 25 АВГУСТА);


int diff = date1.compareTo (date2);
if (diff == 0) {
    System.out.println (date1 + "РАВНО" + date2);
} else if (diff> 0) {
    System.out.println (date1 + "ПОСЛЕ" + date2);
} еще {
    System.out.println (date1 + "is BEFORE" + date2);
}
  

Если вы выполните приведенный выше код, вы увидите следующий результат:

  2018-07-12 ПОСЛЕ 2016-08-25
  

Сравнение

LocalTime экземпляров

A LocalTime представляет время без даты в формате ISO-8601 (ЧЧ: мм: сс).Вот пример, показывающий, как сравнить два экземпляра LocalTime в Java 8 и выше:

  LocalTime time1 = LocalTime.parse ("10:25:39");
LocalTime time2 = LocalTime.parse («14:20:00»);


System.out.println (time1 + "is BEFORE" + time2 + "?" + Time1.isBefore (time2));
System.out.println (time1 + "is AFTER" + time2 + "?" + Time1.isAfter (time2));
  

Приведенный выше код выведет следующее:

  10:25:39 это ДО 14:20? правда
10:25:39 - ПОСЛЕ 14:20? ложный
  

Вы также можете сравнить двух экземпляров LocalTime с помощью метода compareTo () , как и LocalDate :

  LocalTime time1 = LocalTime.из (22, 45, 12);
LocalTime time2 = LocalTime.of (8, 25, 25);


int diff = time1.compareTo (время2);
if (diff == 0) {
    System.out.println (time1 + "РАВНО" + time2);
} else if (diff> 0) {
    System.out.println (time1 + "ПОСЛЕ" + time2);
} еще {
    System.out.println (time1 + "is BEFORE" + time2);
}
  

Вот как теперь выглядит результат:

  22:45:12 - ПОСЛЕ 08:25:25
  

Сравнение

экземпляров LocalDateTime

Класс LocalDateTime представляет дату и время вместе без часового пояса в формате ISO-8601.Чтобы сравнить два экземпляра LocalDateTime , вы можете использовать те же методы isAfter () , isBefore () и isEqual () , как показано ниже:

  LocalDateTime dt1 = LocalDateTime.parse («2016-04-12T12: 55: 15»);
LocalDateTime dt2 = LocalDateTime.parse ("2017-07-15T05: 05: 51");


System.out.println (dt1 + "is BEFORE" + dt2 + ":" + dt1.isBefore (dt2));
System.out.println (dt1 + "ПОСЛЕ" + dt2 + ":" + dt1.isAfter (dt2));
System.out.println (dt1 + "РАВНО" + dt2 + ":" + dt1.isEqual (dt2));
  

Приведенный выше код выводит на консоль следующее:

  2016-04-12T12: 55: 15 ДО 2017-07-15T05: 05: 51: true
2016-04-12T12: 55: 15 - ПОСЛЕ 2017-07-15T05: 05: 51: false
2016-04-12T12: 55: 15 РАВНО 2017-07-15T05: 05: 51: false
  

Чтобы использовать метод compareTo () для сравнения двух экземпляров LocalDateTime , вы можете сделать следующее:

  LocalDateTime dt1 = LocalDateTime.of (1989, Месяц. АВГУСТ, 2, 10, 0);
LocalDateTime dt2 = LocalDateTime.(1992, МАРТ, 23, 17, 33);


int diff = dt1.compareTo (dt2);
if (diff == 0) {
    System.out.println (dt1 + "РАВНО" + dt2);
} else if (diff> 0) {
    System.out.println (dt1 + "ПОСЛЕ" + dt2);
} еще {
    System.out.println (dt1 + "это ДО" + dt2);
}
  

Если вы выполните приведенный выше фрагмент кода, вы должны увидеть следующий результат:

  1989-08-02T10: 00 ДО 1992-03-23T17: 33
  

Сравнение

ZonedDateTime экземпляров

ZonedDateTime представляет дату и время с часовым поясом в формате ISO-8601 (например.g 2015-05-15T10: 15: 30 + 01: 00 [Европа / Париж] ). Он в основном используется для работы с датами и временем, указанными в часовом поясе.

В следующем примере показано, как сравнить два экземпляра ZonedDateTime в Java:

  ZonedDateTime dt1 = ZonedDateTime.parse («2017-05-15T10: 15: 30 + 01: 00 [Азия / Карачи]»);
ZonedDateTime dt2 = ZonedDateTime.parse («2015-05-15T10: 15: 30 + 01: 00 [Европа / Париж]»);


System.out.println (dt1 + "is BEFORE" + dt2 + ":" + dt1.isBefore (dt2));
Система.out.println (dt1 + "is AFTER" + dt2 + ":" + dt1.isAfter (dt2));
System.out.println (dt1 + "РАВНО" + dt2 + ":" + dt1.isEqual (dt2));
  

Вы должны увидеть следующий результат для приведенного выше фрагмента кода:

  2017-05-15T10: 15: 30 + 05: 00 [Азия / Карачи] ДО 2015-05-15T10: 15: 30 + 02: 00 [Европа / Париж]: false
2017-05-15T10: 15: 30 + 05: 00 [Азия / Карачи] ПОСЛЕ 2015-05-15T10: 15: 30 + 02: 00 [Европа / Париж]: верно
2017-05-15T10: 15: 30 + 05: 00 [Азия / Карачи] РАВНО 2015-05-15T10: 15: 30 + 02: 00 [Европа / Париж]: false
  

ZonedDateTime также предоставляет метод compareTo () для сравнения двух его экземпляров:

  ZonedDateTime dt1 = ZonedDateTime.из (2015, 7, 12, 10, 0, 0, 0, ZoneId.of («Европа / Париж»));
ZonedDateTime dt2 = ZonedDateTime.of (2019, 12, 5, 17, 0, 0, 0, ZoneId.of ("Америка / Нью-Йорк"));


int diff = dt1.compareTo (dt2);
if (diff == 0) {
    System.out.println (dt1 + "РАВНО" + dt2);
} else if (diff> 0) {
    System.out.println (dt1 + "ПОСЛЕ" + dt2);
} еще {
    System.out.println (dt1 + "это ДО" + dt2);
}
  

Вы должны увидеть следующий результат:

  2015-07-12T10: 00 + 02: 00 [Европа / Париж] ДО 2019-12-05T17: 00-05: 00 [America / New_York]
  

Сравнение

OffsetDateTime экземпляров

Экземпляр OffsetDateTime представляет дату и время со смещением относительно UTC / Гринвича в формате ISO-8601 (например.грамм. 2018-06-30T23: 15: 30 + 03: 30).

Давайте посмотрим на пример ниже, который показывает, как вы можете сравнить два экземпляра OffsetDateTime :

  OffsetDateTime dt1 = OffsetDateTime.parse ("2018-06-30T23: 15: 30 + 03: 30");
OffsetDateTime dt2 = OffsetDateTime.parse ("2011-11-25T23: 15: 30-05: 00");


System.out.println (dt1 + "is BEFORE" + dt2 + ":" + dt1.isBefore (dt2));
System.out.println (dt1 + "ПОСЛЕ" + dt2 + ":" + dt1.isAfter (dt2));
System.out.println (dt1 + "РАВНО" + dt2 + ":" + dt1.isEqual (dt2));
  

Вот результат выполнения приведенного выше фрагмента кода:

  2018-06-30T23: 15: 30 + 03: 30 ДО 2011-11-25T23: 15: 30-05: 00: false
2018-06-30T23: 15: 30 + 03: 30 ПОСЛЕ 2011-11-25T23: 15: 30-05: 00: верно
2018-06-30T23: 15: 30 + 03: 30 РАВНО 2011-11-25T23: 15: 30-05: 00: false
  

Аналогичным образом вы можете использовать compareTo () для сравнения двух экземпляров OffsetDateTime , как показано ниже:

  OffsetDateTime dt1 = OffsetDateTime.из (2011, 8, 25, 15, 40, 0, 0, ZoneOffset.of ("+ 03:00"));
OffsetDateTime dt2 = OffsetDateTime.of (2017, 3, 15, 5, 15, 45, 0, ZoneOffset.of ("- 05:00"));


int diff = dt1.compareTo (dt2);
if (diff == 0) {
    System.out.println (dt1 + "РАВНО" + dt2);
} else if (diff> 0) {
    System.out.println (dt1 + "ПОСЛЕ" + dt2);
} еще {
    System.out.println (dt1 + "это ДО" + dt2);
}
  

Приведенный выше код выведет следующее:

  2011-08-25T15: 40 + 03: 00 ДО 2017-03-15T05: 15: 45-05: 00
  

Сравнение

мгновенных экземпляров

Instant представляет определенный момент на временной шкале по всемирному координированному времени.Вот как можно сравнить два экземпляра Instant :

  Мгновенно Instant1 = Instant.parse ("2019-10-20T12: 55: 30.00Z");
Instant Instant2 = Instant.parse ("2017-01-25T23: 15: 30.55Z");


System.out.println (Instant1 + "is BEFORE" + Instant2 + ":" + Instant1.isBefore (Instant2));
System.out.println (Instant1 + «ПОСЛЕ» + Instant2 + «:« + Instant1.isAfter (Instant2));
  

Вот результат выполнения приведенного выше фрагмента кода:

  2019-10-20T12: 55: 30Z ДО 2017-01-25T23: 15: 30.550Z: ложь
2019-10-20T12: 55: 30Z ПОСЛЕ 2017-01-25T23: 15: 30.550Z: верно
  

Два экземпляра Instant также можно сравнить с помощью compareTo () , как показано ниже:

  Мгновенно Instant1 = Instant.parse ("2019-10-20T12: 55: 30.00Z");
Instant Instant2 = Instant.parse ("2017-01-25T23: 15: 30.55Z");


int diff = Instant1.compareTo (Instant2);
if (diff == 0) {
    System.out.println (Instant1 + "РАВНО" + Instant2);
} else if (diff> 0) {
    Система.out.println (Instant1 + «ПОСЛЕ» + Instant2);
} еще {
    System.out.println (instant1 + "is BEFORE" + Instant2);
}
  

Вот результат, когда мы используем compareTo () для сравнения Instant объектов:

  2019-10-20T12: 55: 30Z ПОСЛЕ 2017-01-25T23: 15: 30.550Z
  

Посмотрите учебное пособие «Введение в Java 8 Date and Time API», чтобы узнать больше о новых примерах API даты и времени.

Старый

Дата и Календарь API

До Java 8, java.util.Date и классы java.util.Calendar использовались для управления датой и временем. У этих устаревших классов есть много недостатков, которые были исправлены с выпуском нового API даты и времени. Но эти классы до сих пор активно используются в старых проектах. Поэтому стоит знать, как сравнить два экземпляра Date или Calendar .

Оба класса Date и Calendar предоставляют следующий метод сравнения дат.

compareTo () Метод

Метод compareTo () используется для сравнения двух дат для заказа.Он возвращает 0, если обе даты равны. В противном случае положительное значение, если эта дата больше указанной даты, и отрицательное, если она меньше.

В следующем примере показано, как сравнить два экземпляра Date с помощью метода compareTo () :

  try {
    
    Формат SimpleDateFormat = новый SimpleDateFormat ("гггг-ММ-дд");

    
    Дата date1 = format.parse ("2019-10-20");
    Дата date2 = format.parse ("2017-01-25");

    
    int diff = date1.compareTo (дата2);
    if (diff == 0) {
        System.out.println (date1 + "РАВНО" + date2);
    } else if (diff> 0) {
        System.out.println (date1 + "ПОСЛЕ" + date2);
    } еще {
        System.out.println (date1 + "is BEFORE" + date2);
    }

} catch (ParseException ex) {
    например printStackTrace ();
}
  

Приведенный выше код выведет что-то вроде следующего:

  Вс 20 октября 00:00:00 PKT 2019 ПОСЛЕ среды 25 января 00:00:00 PKT 2017
  

Аналогичным образом можно сравнить два экземпляра Calendar с помощью метода compareTo () , как показано ниже:

  try {
    
    Формат SimpleDateFormat = новый SimpleDateFormat ("гггг-ММ-дд");

    
    Календарь cal1 = Календарь.getInstance ();
    Календарь cal2 = Calendar.getInstance ();

    
    cal1.setTime (format.parse ("2019-10-20"));
    cal2.setTime (format.parse ("2017-01-25"));
    
    
    int diff = cal1.compareTo (cal2);
    if (diff == 0) {
        System.out.println (cal1 + "РАВНО" + cal2);
    } else if (diff> 0) {
        System.out.println (cal1 + "ПОСЛЕ" + cal2);
    } еще {
        System.out.println (cal1 + "до" + cal2);
    }

} catch (ParseException ex) {
    например printStackTrace ();
}
  

до () , после () и равно () Методы

Более удобный способ сравнить два экземпляра старого API даты и времени — использовать методы before () , after () и eqauls () .Эти методы возвращают true , если этот экземпляр находится до, после или равен указанному экземпляру.

Вот пример, который использует вышеуказанные методы для сравнения двух экземпляров Date :

  try {
    
    Формат SimpleDateFormat = новый SimpleDateFormat ("гггг-ММ-дд");

    
    Дата date1 = format.parse ("2017-12-25");
    Дата date2 = format.parse («2016-08-05»);

    
    System.out.println (date1 + "is BEFORE" + date2 + ":" + date1.до (дата2));
    System.out.println (date1 + "is AFTER" + date2 + ":" + date1.after (date2));
    System.out.println (date1 + "РАВНО" + date2 + ":" + date1.equals (date2));

} catch (ParseException ex) {
    например printStackTrace ();
}
  

Если вы выполните приведенный выше фрагмент кода, вы увидите следующий результат:

  Пн 25 декабря 00:00:00 PKT 2017 ДО ПТ 05 августа 00:00:00 PKT 2016: ложь
Пн 25 дек 00:00:00 PKT 2017 ПОСЛЕ Пт 05 августа 00:00:00 PKT 2016: верно
Пн 25 декабря 00:00:00 PKT 2017 РАВНО ПТ 05 августа 00:00:00 PKT 2016: false
  

Наконец, в конце, давайте посмотрим на пример, демонстрирующий, как сравнить два экземпляра Calendar API:

  try {
    
    Формат SimpleDateFormat = новый SimpleDateFormat ("гггг-ММ-дд");

    
    Календарь cal1 = Календарь.getInstance ();
    Календарь cal2 = Calendar.getInstance ();

    
    cal1.setTime (format.parse ("2010-08-20"));
    cal2.setTime (format.parse ("2019-01-25"));

    
    System.out.println (cal1 + "is BEFORE" + cal2 + ":" + cal1.before (cal2));
    System.out.println (cal1 + "ПОСЛЕ" + cal2 + ":" + cal1.after (cal2));
    System.out.println (cal1 + "РАВНО" + cal2 + ":" + cal1.equals (cal2));

} catch (ParseException ex) {
    например printStackTrace ();
}
  

Сводка

Сравнение дат — важная задача, которую вы должны знать, работая на Java.В этой статье мы рассмотрели несколько способов сравнения дат, полученных из разных API в Java. Мы начали с нового API даты и времени Java 8 и обсудили, как сравнивать даты со временем и часовыми поясами или без них. В конце мы также рассмотрели сравнение дат с использованием устаревшего API Date и Calendar .

Новый API даты и времени, представленный в Java 8, предоставляет широкий спектр классов, которые упростили работу с датами и временем. Эти классы потокобезопасны, проще в использовании и содержат множество служебных методов для выполнения различных операций.

Читать дальше: Как получить текущую дату и время в Java

✌️ Понравилась статья? Следуй за мной на Твиттер и LinkedIn. Вы также можете подписаться на Новостная лента.

JavaPerspective.com — 5.5. Работа с датами

5.5. Работа с датами

Последнее обновление: 27 января 2013 г.


Из этого туториала Вы узнаете, как управлять датами в Java.

5.5.1. Класс java.util.Дата


На языке Java данный момент представлен количеством миллисекунд с 1 января 1970 года, 00:00:00 по Гринвичу. Эта дата известна как эпоха. Например, метод currentTimeMillis, предоставляемый классом System, возвращает текущее время как значение типа long, представляющее количество миллисекунд с начала эпохи. Класс java.util.Date обертывает переменную типа long, представляющую данный момент. Следующий оператор создает объект Date, представляющий текущий момент:
Вы можете сравнить две даты с помощью метода compareTo (Date anotherDate), предоставляемого классом java.util.Date. Например, метод compareDates в классе DateTesting, показанном ниже, сравнивает две даты: import java.util.Date; общедоступный окончательный класс DateTesting {

public void compareDates () {
Date date1 = new Date ();
System.out.println (date1);

петля

(30000);

Дата date2 =

новая дата ();
System.out.println (date2);

if (date1.compareTo (date2) <0)
System.out.println (date1 + «раньше» + date2);
else if (date1.compareTo (date2) == 0)
System.out.println (date1 + «равно» + date2);
else
System.out.println (date1 + «после» + date2);
}

закрытый цикл void (int maxLoops) {
String s = «»;

// объединение строк с помощью оператора +, чтобы потратить время перед возвратом к вызывающей стороне
for (int i = 0; i s = s + String.valueOf (я);
}
}

5.5.2. Календарь класса


Класс Calendar является оболочкой для объекта Date и имеет дополнительные поля, такие как год, месяц, день, час, минута, секунда и миллисекунда. Следовательно, вы можете получить год, месяц, день, час, минуту, секунду и миллисекунду для данного объекта календаря. Вы также можете изменить значения этих полей по мере необходимости. Следующий оператор объявляет объект календаря, в полях которого установлены текущая дата и время:

Calendar now = Календарь.getInstance ();


Поля объекта календаря теперь можно получить, вызвав метод get (int field), который возвращает целочисленное значение, как показано ниже:

now.get (Calendar.YEAR) // возвращает год
now.get (Calendar.MONTH) // возвращает месяц (от 0 до 11)
now.get (Calendar.DATE) // возвращает день месяц (от 1 до 31)
now.get (Calendar.DAY_OF_MONTH) // возвращает день месяца (такой же, как now.get (Calendar.DATE))
now.get (Calendar.HOUR_OF_DAY) // возвращает час в 12-часовом формате (от 0 до 11)
now.get (Calendar.HOUR) // возвращает час в 24-часовые часы (от 0 до 23)
now.get (Calendar.MINUTE) // возвращает минуты в час (диапазоны от 0 до 59)
now.get (Calendar.SECOND) // возвращает секунды в минута (от 0 до 59)
now.get (Calendar.MILLISECOND) // возвращает миллисекунды в секундах (диапазоны от 0 до 999)


Теперь вы можете получить объект Date из объекта календаря, вызвав метод getTime:

сейчас.getTime () // возвращает объект Date, представляющий значение времени календаря «сейчас»


Вы также можете изменить значения полей календаря, вызвав один из следующих методов: добавить, установить или свернуть. Например, теперь вы можете вызвать эти методы в объекте календаря следующим образом:

now.add (Calendar.MONTH, 2) // добавляет 2 месяца в поле MONTH, при необходимости изменяя поле YEAR
now.set (Calendar.MONTH, Calendar.MAY) // устанавливает в поле MONTH значение MAY (value = 4)
сейчас.ролл (Calendar.DAY_OF_MONTH, 15); // добавляет 15 дней в поле DAY_OF_MONTH без изменения больших полей


Обратите внимание, что метод setTime (Date date) позволяет вам установить время календаря с заданным объектом даты.

5.5.3. Класс GregorianCalendar


Класс GregorianCalendar является прямым подклассом класса Calendar. Он представляет собой григорианский календарь и предоставляет метод с именем isLeapYear (int year), который возвращает логическое значение, указывающее, является ли данный год високосным или нет.

5.5.4. Класс SimpleDateFormat


Класс SimpleDateFormat является подклассом класса DateFormat и используется для синтаксического анализа и форматирования дат. Ниже показан самый простой способ вывода даты на стандартный вывод без какого-либо шаблона форматирования:

Дата сейчас = новая дата ();
System.out.println (сейчас);


Последний оператор, показанный выше, вызывает метод toString, предоставленный классом java.util.Date. Однако вам может потребоваться отформатировать дату по-другому.Класс SimpleDateFormat позволяет указать шаблон для даты, которую вы хотите отформатировать. Например, следующий шаблон используется для объединения года (4 цифры), месяца (2 цифры) и дня (2 цифры):

ггггMMdd


Документация API класса SimpleDateFormat показывает список всех букв шаблона. ты можешь использовать. В качестве примера вот как вывести текущую дату на стандартный вывод, используя шаблон yyyyMMdd: import java.text.SimpleDateFormat;
импорт java.util.Date; общедоступный окончательный класс DateTesting {

public void printDate () {
Date now = new Date ();
SimpleDateFormat sdf = новый SimpleDateFormat («yyyyMMdd»);
String s = sdf.format (сейчас);
System.out.println (s);
}
}
Класс SimpleDateFormat также позволяет анализировать строку, представляющую дату, и получать объект Date путем вызова метода parse (источник String).

5.5.5. Выполните упражнение


Напишите метод с именем stringToDate (значение String, шаблон String), который возвращает объект Date, полученный путем анализа заданного строкового значения с заданным шаблоном.
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; общедоступный окончательный класс DateTesting {

общедоступный Date stringToDate (строковое значение, строковый шаблон) выдает исключение ParseException {
SimpleDateFormat sdf = new SimpleDateFormat (шаблон);
return sdf.parse (значение);
}
}

Java: тип данных даты — бизнес-класс [видео 2021 года]

Дата Деталь Значение Java Банкноты
Год х — 1900 пример: 2018 = 118; 2018-1900 = 118
Месяц целое число от 0 до 11 января = 0; 1 февраля и др.
День целое число от 1 до 31 Нормальное представление
Час целое число от 0 до 23 Полночь 0
Минуты целое число от 0 до 59
Второй целое число от 0 до 61 60 и 61 используются для расчета скачка

Примеры

Очень распространенной функцией программирования является сравнение дат.Однако, прежде чем мы сможем показать это сравнение, нам нужно понять, как Java хранит даты.

1. Пример: секунды с 01.01.1970

Java хранит время с 1 января 1970 года, сохраняя его как количество миллисекунд с этой даты. Таким образом, это значение является длинным типом данных. Почему это число может вас заинтересовать?

Работа с датами может создать некоторые проблемы для программиста. Сколько дней, например, между 5 марта 1983 г. и 7 июня 1995 г.? Если вы просто вычтите эти даты, вы, вероятно, получите неправильный ответ из-за високосных лет.Поскольку у нас есть количество миллисекунд с 01.01.1970, вычисления намного точнее.

Чтобы получить это число, мы можем вызвать метод getTime () в классе Date. Из нашего предыдущего примера давайте получим текущее количество миллисекунд:

На момент подготовки этого урока его стоимость составляла 1 468 874 284 403 человека. Затем это можно сохранить в другую переменную и использовать для сравнения дат.Если у вас есть миллисекунды, нужно разделить их на 1000 (чтобы получить секунды), затем на 60 (минуты) и так далее.

2. Пример: сравнение времени

Давайте запустим быструю программу, чтобы узнать, сколько часов и дней осталось до следующего лета. Сначала мы установим две даты, одна из которых будет жестко привязана к определенной дате. Обратите внимание, что в коде мы используем 117 (помните, что Java хранит год как x — 1900) для 2017 года и 5 как месяц июнь (Java начинает отсчет с нуля).Следовательно, информация в круглых скобках — это выражение Date, представляющее год, месяц и день. В данном случае 117 = 2017; 5 = июнь; 21 = 21 день.

С кодом много чего происходит, но суть в том, что он хранит текущую дату и будущую летнюю дату. Затем он делит каждую часть (миллисекунды, секунды, минуты, часы, дни), чтобы отображать каждый параметр.

3. Пример: преобразование даты в строку

Одним из методов, включенных в класс Date, является метод toString (): он преобразует дату в строку.

Теперь мы можем рассматривать дату как строку. Со String мы получаем множество других методов.

4. Получение частей даты

Есть несколько замечательных методов для получения частей даты. Они перечислены в следующей таблице:

Метод Функция
getDate () День месяца
getMonth () Месяц (помните, что месяцы начинаются с 0!)
getYear () Год (x — 1900)

Следующий код анализирует все три на текущую дату (на момент написания этого) и добавляет 1 к месяцу и 1900 к году, чтобы учесть возможности Java.

Наконец, вот результат:

Резюме урока

Давайте на секунду подумаем. Java Date — это не только тип данных, но и класс, что означает, что у него есть свои собственные мощные методы. Один из таких методов — getTime (). Поскольку с 01.01.1970 в Java дата / время хранится в миллисекундах, у нас есть мощный инструмент для сравнения дат и их проверки. Другие методы включают getDate (), getDay (), getMonth () и getYear ().

@DateTimeFormat с Java 8 Date-Time API

@DateTimeFormat аннотация, которая была представлена ​​в Spring 3.0 как часть Formatter SPI, может использоваться для синтаксического анализа и печати локализованных значений полей в веб-приложениях. В Spring 4.0 аннотация @DateTimeFormat может использоваться с Java 8 Date-Time API ( java.time ) без дополнительных усилий.

В Spring форматирование поля можно настроить по типу поля или аннотации. Для привязки аннотации к форматеру необходимо реализовать AnnotationFormatterFactory .Spring 4.0 содержит Jsr310DateTimeFormatAnnotationFormatterFactory , который форматирует поля даты и времени Java 8, аннотированные с помощью @DateTimeFormat . Поддерживаются следующие типы полей:

  • java.time.LocalDate
  • java.time.LocalTime
  • java.time.LocalDateTime
  • java.time.ZonedDateTime
  • java.time.OffsetDateTime
  • java.time.OffsetTime

Все упомянутые типы можно использовать в следующей форме:


public class DatesForm {

    @DateTimeFormat (iso = ISO.ДАТА)
    частный LocalDate localDate;

    @DateTimeFormat (iso = ISO.TIME)
    частный LocalTime localTime;

    @DateTimeFormat (iso = ISO.TIME)
    частный OffsetTime offsetTime;

    @DateTimeFormat (iso = ISO.DATE_TIME)
    частный LocalDateTime localDateTime;

    @DateTimeFormat (iso = ISO.DATE_TIME)
    private ZonedDateTime zonedDateTime;

    @DateTimeFormat (iso = ISO.DATE_TIME)
    частный OffsetDateTime offsetDateTime;
    
}


 
Форму можно передать представлению, и Spring позаботится о правильном форматировании полей.

При указании форматирования в полях типов: java.time.LocalDate , java.time.LocalTime , java.time.OffsetTime не забудьте правильно настроить @DateTimeFormat .

@DateTimeFormat объявляет, что поле должно быть отформатировано как дата и время , а поскольку java.time.LocalDate представляет дату, а два других представляют время — вы получите java.time.temporal.UnsupportedTemporalTypeException (например: Неподдерживаемое поле: ClockHourOfAmPm, Неподдерживаемое поле: MonthOfYear), создаваемое java.time.format.DateTimeFormatter .

Современная обработка даты и времени во всех версиях Android (без сахара)

Работать со временем в Android всегда было непросто. Люди использовали либо сторонние библиотеки (например, Joda-Time, ThreeTenBp), либо работали со встроенными классами времени (такими как Calendar).Встроенные классы, хотя и доступны во всех версиях Android, имели не очень хороший API, были изменяемыми (поэтому не были поточно-ориентированными), а обработка часовых поясов была проблемой (ref).

В последнем выпуске подключаемого модуля Android Gradle (v.4.0.0 +) была представлена ​​«поддержка удаления сахара из API Java 8+». Проще говоря, мы можем использовать и Java 8 API, и плагин незаметно переведет эти API на Android-совместимую Java, которая может использоваться во всех версиях Android, не требуя минимального уровня API!

В целом, Kotlin предоставляет свои замены Collections и Stream API, которые, на мой взгляд, превосходят Java.Итак, из списка API Java 8, я думаю, что для разработчика Kotlin интересен только превосходный API java.time. Наконец, хороший API даты / времени, который можно использовать в Android!

Обратите внимание, что этот процесс «обессахаривания» может стоить несколько дополнительных КБ в APK / AAB. Но если это не является препятствием для вашего случая, вам следует подумать об использовании новых API.

Настроить

Вам нужно будет изменить файлы build.gradle . Более подробная информация (и актуальные коды версий) в официальном документе.

  android {
  [...]

  defaultConfig {
    // Требуется при установке minSdkVersion на 20 или ниже
    multiDexEnabled истина
  }

  compileOptions {
    // Флаг для включения поддержки новых языковых API
    coreLibraryDesugaringEnabled истина
    // Устанавливает совместимость Java с Java 8
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
  
  [...]
}



dependencies {
  [...]
  
  coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0,9 '
  
  [...]
}  

Знакомство с классами

API времени довольно обширен, и полное изучение API выходит за рамки этой статьи. Но я хочу представить основные классы, которые, по моему мнению, могут вам понадобиться в большинстве случаев.

Мгновенно

Мгновенно — это момент времени. Может считаться эквивалентом отметки времени, если вы знакомы с этим термином.

LocalTime, LocalDate, LocalDateTime

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

ZoneOffset, ZoneId

Используются для работы с часовыми поясами. Вам понадобится один из них, чтобы преобразовать Local * в Instant .

ZonedDateTime

Вы, наверное, догадались. Это то, что вы получите, если объединить LocalDateTime с ZoneId . Его можно преобразовать в Instant .

Игра с датой и временем

Эти API-интерфейсы предоставляют интуитивно понятные и последовательные способы управления датой и временем.Помните, что все объекты неизменяемы, поэтому новый объект создается каждый раз, когда происходит манипуляция (что хорошо). Ниже приведены некоторые полезные примеры.

  val someDate = LocalDate.of (2020, 7, 28)
val someDateTime = LocalDateTime.ofEpochSecond (1595363833)
val someInstant = Instant.parse ("2007-12-03T10: 15: 30.00Z")  
Несколько способов инициализации объектов времени.
  val сегодня: LocalDate = LocalDate.now ()
val startOfDay: LocalDateTime = today.atStartOfDay ()  
Получить дату начала + время дня, определенного значением LocalDate
  val now: LocalDateTime = LocalDateTime.сейчас()
val nowInLA: ZonedDateTime = now.atZone (ZoneId.of ("America / Los_Angeles"))  
Узнайте, какая дата + время сейчас в Лос-Анджелесе.
  val мгновенно: Instant = nowInLA.toInstant ()
val timestampInSeconds: Long = Instant.epochSecond
val timestampInMilliseconds: Long = Instant.toEpochMilli ()  
Получите момент времени в различных формах.
  val сегодня: LocalDate = LocalDate.now ()
val previousWeek: LocalDate = LocalDate.now (). minusWeeks (1)  
Получить тот же день, на 1 неделю раньше.Есть доступные методы для каждой единицы времени.

Форматирование

Просто обратите внимание, что средства форматирования, к которым вы привыкли в Android, такие как SimpleDateFormat , не могут использоваться с Java Time API. API поставляется с собственными средствами форматирования, такими как DateTimeFormatter .

  DateTimeFormatter.ISO_DATE.format (мгновенно)  

Наслаждайтесь современным API даты и времени при разработке Android life 🙂

Как добавить дату и время в Java

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

В этой статье мы собираемся обсудить, как можно использовать возможности Java для добавления функций даты и времени на свой веб-сайт или проект. Есть несколько способов сделать это, и функция времени и даты также может принимать множество различных форм.В этой статье мы обсудим базовый процесс добавления времени и даты с помощью Java, а также подробно рассмотрим, на что похож каждый вид структуры времени и даты, и как каждый из них может быть используется наиболее эффективно.

Конструкторы даты
Класс Date предоставляется базовой структурой Java. Это происходит из пакета java.util, и это основная функция для оценки текущего времени и даты для элемента. С датами связаны два конструктора: Date () и Date (длинная миллисекунда).Первый, Date () — самый простой из доступных конструкторов. Он инициализирует объект, к которому он прикреплен, текущими датой и временем в соответствии с физическим местоположением объекта. Вторая, Date (long millisec) — это немного более продвинутая версия, которая подсчитывает количество миллисекунд, прошедших с полуночи 1 января 1970 года.

Методы
Для класса Date доступно очень много методов. Они, по порядку, логические после (Дата, дата), логические до (Дата, дата), Object clone (), int compareTo (Дата, дата), int compareTo (Object obj), логическое равно (Дата объекта), long getTime () , int hashCode (), void setTime (долгое время), String toString ().Большинство из них говорят сами за себя. Разумеется, логические операторы — это И, ИЛИ, НЕ. Команда int работает с целыми числами, а команда long относится к количеству миллисекунд, прошедших с 1 января 1970 года. Есть также довольно много таких команд, которые сравнивают определенные даты либо с количеством времени, прошедшим с января. 1, 1970, или другой произвольной мере истекшего времени.

Получение текущего времени и даты
Это довольно простой процесс.Простой объект Date с командой toString () может использоваться для печати даты, текущей для элемента, с которым задействован метод. Импорт утилиты из java.util — это часть процесса, которая прикрепляет дату к методу, который печатается процессом.

Способы сравнения дат
В общем, есть три способа сравнить две даты с помощью Java. Первый — использовать getTime (), который сравнивает количество миллисекунд, прошедших с 1 января 1970 года, для каждого из двух объектов, а затем сравнивает их.Второй метод — использовать команды before () after () и equals (), чтобы создать своего рода ситуацию, когда разные даты автоматически сравниваются на основании их отдельных команд, которые вернут сравниваемую дату после того, как математика будет вычислена автоматически. . Третий и последний метод является наиболее прямым — вы можете использовать метод compareTo (), который требует специально заполненного интерфейса данных, который затем автоматически реализуется в возврате для объекта, который затем отображает дату.

Даты форматирования

Существует множество различных кодов простого форматирования дат. Все это коды ASCII, поэтому знакомство с ними является плюсом. Как правило, они соответствуют букве кода описания. Обычно это довольно интуитивно понятно. Например, M обозначает «Месяц в году», который может возвращать либо июль, либо 07. То же самое верно и для d, обозначающего «День в месяце», который возвращается в виде числового значения, такого как 10. Некоторые из них не так интуитивно понятны. , например G, что означает эпоху, например AD или BCE, или a, что означает A.М. / П.М.

Символы преобразования
Символы преобразования действительно похожи на даты форматирования. Однако они не такие интуитивно понятные и понятные, как форматирующие, потому что они более конкретно привязаны к таким вещам, как цифры и недельное форматирование. Опять же, их слишком много, чтобы перечислить, но есть несколько примеров того, как они работают. Например, B — это полное название месяца, например, май или июль. Между тем, b — это сокращенное название месяца, например июль или февраль.

Спальный

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

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

Григорианский календарь
Часть базового класса календаря Java — это жестко запрограммированный григорианский календарь.Это означает, что вы можете реализовать функции времени и даты на основе знакомого вам календаря. Это дает вам доступ к множеству различных команд, таких как создание календарей на основе григорианских месяцев и синхронизация данных вместе на основе текущего григорианского времени.

Java 8 дата и время API

API даты и времени Java 8 — довольно сложная функция, для объяснения которой, честно говоря, может потребоваться отдельная статья.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *