Java one hour ago

17. Java – Дата и время

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

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

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

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

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

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

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

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

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

import java.util.Date; public class Test < public static void main(String args[]) < // Инициализация объекта date Date date = new Date(); // Вывод текущей даты и времени с использованием toString() System.out.println(date.toString()); >> 

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

Sun Nov 13 00:14:19 FET 2016 

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

Существуют три способа в 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 позволяет начать с выбора любых пользовательских шаблонов для форматирования даты и времени. Например:

import java.util.*; import java.text.*; public class Test < public static void main(String args[]) < Date dateNow = new Date(); SimpleDateFormat formatForDateNow = new SimpleDateFormat("E yyyy.MM.dd 'и время' hh:mm:ss a zzz"); System.out.println("Текущая дата " + formatForDateNow.format(dateNow)); >> 

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

Текущая дата Вс 2016.11.13 и время 12:12:36 AM FET 

Формат-коды 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) 0
z Часовой пояс FET (Дальневосточноевропейское время)
Выделение для текста Текст
» Одинарная кавычка

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

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

import java.util.Date; public class Test < public static void main(String args[]) < // Инициализация объекта date Date date = new Date(); // Вывод текущей даты и времени с использованием toString() String str = String.format("Текущая дата и время: %tc", date); System.out.printf(str); >> 

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

Текущая дата и время: Вс ноя 13 00:55:59 FET 2016 

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

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

import java.util.Date; public class Test < public static void main(String args[]) < // Инициализация объекта date Date date = new Date(); // Вывод текущей даты с использованием toString() System.out.printf("%1$s %2$td %2$tB %2$tY", "Дата:", date); >> 

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

Источник

Calculate Relative Time also known as “Time Ago” In Java

Here is an example of how you can calculate relative time also know as “time ago” in java. This will return the time difference between two dates in years, months, weeks, days, hours, minutes or seconds depending on the time interval between the two times.

  • X seconds will be printed if the time interval is between 0 and 60 seconds
  • X minutes will be printed if the time interval is between 60 seconds and 60 minutes
  • X hours will be printed if the time interval is between 60 minutes and 24 hours
  • X days will be printed if the time interval is between 24 hours and 1 week
  • X weeks will be printed if the time interval is between 1 week and 30 days
  • X months will be printed if the time interval is between 30 days and 365 days
  • X years will be printed if the time interval is between 365 year and …

Be warned that we use 30 days for a month and that results may vary depending on what month you are currently in.

Time Ago Class

We created a class that will convert a long which is the time difference of two date times to be formatted as the time ago format. As a convenience we also added a method that will take two dates and calculate the difference by themselves. The maxLevel parameter takes an int indicating how many levels your output prints. e.g.: when you specify level 1 then only the biggest value will be printed.

package com.memorynotfound.time; import java.util.Date; import java.util.LinkedHashMap; import java.util.Map; import java.util.concurrent.TimeUnit; public class TimeAgo < public static final Maptimes = new LinkedHashMap<>(); static < times.put("year", TimeUnit.DAYS.toMillis(365)); times.put("month", TimeUnit.DAYS.toMillis(30)); times.put("week", TimeUnit.DAYS.toMillis(7)); times.put("day", TimeUnit.DAYS.toMillis(1)); times.put("hour", TimeUnit.HOURS.toMillis(1)); times.put("minute", TimeUnit.MINUTES.toMillis(1)); times.put("second", TimeUnit.SECONDS.toMillis(1)); >public static String toRelative(long duration, int maxLevel) < StringBuilder res = new StringBuilder(); int level = 0; for (Map.Entrytime : times.entrySet()) < long timeDelta = duration / time.getValue(); if (timeDelta >0) < res.append(timeDelta) .append(" ") .append(time.getKey()) .append(timeDelta >1 ? "s" : "") .append(", "); duration -= time.getValue() * timeDelta; level++; > if (level == maxLevel) < break; >> if ("".equals(res.toString())) < return "0 seconds ago"; >else < res.setLength(res.length() - 2); res.append(" ago"); return res.toString(); >> public static String toRelative(long duration) < return toRelative(duration, times.size()); >public static String toRelative(Date start, Date end) < assert start.after(end); return toRelative(end.getTime() - start.getTime()); >public static String toRelative(Date start, Date end, int level) < assert start.after(end); return toRelative(end.getTime() - start.getTime(), level); >>

Testing

For testing purposes we will print out every possible situation how you can use the TimeAgo class.

package com.memorynotfound.time; import java.util.Date; import java.util.concurrent.TimeUnit; public class TimeAgoProgram < private static final long ONE_SECOND = TimeUnit.SECONDS.toMillis(1); private static final long ONE_MINUTE = TimeUnit.MINUTES.toMillis(1); private static final long ONE_HOUR = TimeUnit.HOURS.toMillis(1); private static final long ONE_DAY = TimeUnit.DAYS.toMillis(1); private static final long ONE_WEEK = TimeUnit.DAYS.toMillis(7); private static final long ONE_MONTH = TimeUnit.DAYS.toMillis(30); private static final long ONE_YEAR = TimeUnit.DAYS.toMillis(365); private static final int RANDOM = 3521; public static void main(String. args)< System.out.println("Generate time ago from long"); System.out.println(TimeAgo.toRelative(ONE_SECOND)); System.out.println(TimeAgo.toRelative(ONE_MINUTE)); System.out.println(TimeAgo.toRelative(ONE_HOUR)); System.out.println(TimeAgo.toRelative(ONE_DAY)); System.out.println(TimeAgo.toRelative(ONE_WEEK)); System.out.println(TimeAgo.toRelative(ONE_MONTH)); System.out.println(TimeAgo.toRelative(ONE_YEAR)); System.out.println("\nGenerate time ago from long with random number"); System.out.println(TimeAgo.toRelative(ONE_SECOND * RANDOM)); System.out.println(TimeAgo.toRelative(ONE_MINUTE * RANDOM)); System.out.println(TimeAgo.toRelative(ONE_HOUR * RANDOM)); System.out.println(TimeAgo.toRelative(ONE_DAY * RANDOM)); System.out.println(TimeAgo.toRelative(ONE_WEEK * RANDOM)); System.out.println(TimeAgo.toRelative(ONE_MONTH * RANDOM)); System.out.println(TimeAgo.toRelative(ONE_YEAR * RANDOM)); System.out.println("\nGenerate time ago from long with random number and 2 levels"); System.out.println(TimeAgo.toRelative(ONE_SECOND * RANDOM, 2)); System.out.println(TimeAgo.toRelative(ONE_MINUTE * RANDOM, 2)); System.out.println(TimeAgo.toRelative(ONE_HOUR * RANDOM, 2)); System.out.println(TimeAgo.toRelative(ONE_DAY * RANDOM, 2)); System.out.println(TimeAgo.toRelative(ONE_WEEK * RANDOM, 2)); System.out.println(TimeAgo.toRelative(ONE_MONTH * RANDOM, 2)); System.out.println(TimeAgo.toRelative(ONE_YEAR * RANDOM, 2)); System.out.println("\nGenerate time ago from date"); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_SECOND))); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_MINUTE))); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_HOUR))); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_DAY))); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_WEEK))); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_MONTH))); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_YEAR))); System.out.println("\nGenerate time ago from date with random number"); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_SECOND * RANDOM))); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_MINUTE * RANDOM))); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_HOUR * RANDOM))); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_DAY * RANDOM))); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_WEEK * RANDOM))); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_MONTH * RANDOM))); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_YEAR * RANDOM))); System.out.println("\nGenerate time ago from with random number and 2 levels"); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_SECOND * RANDOM), 2)); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_MINUTE * RANDOM), 2)); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_HOUR * RANDOM), 2)); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_DAY * RANDOM), 2)); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_WEEK * RANDOM), 2)); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_MONTH * RANDOM), 2)); System.out.println(TimeAgo.toRelative(new Date(), new Date(new Date().getTime() + ONE_YEAR * RANDOM), 2)); >>

Here are the test results.

Generate time ago from long 1 second ago 1 minute ago 1 hour ago 1 day ago 1 week ago 1 month ago 1 year ago Generate time ago from long with random number 58 minutes, 41 seconds ago 2 days, 10 hours, 41 minutes ago 4 months, 3 weeks, 5 days, 17 hours ago 9 years, 7 months, 3 weeks, 5 days ago 67 years, 6 months, 1 week, 5 days ago 289 years, 4 months, 3 weeks, 4 days ago 3521 years ago Generate time ago from long with random number and 2 levels 58 minutes, 41 seconds ago 2 days, 10 hours ago 4 months, 3 weeks ago 9 years, 7 months ago 67 years, 6 months ago 289 years, 4 months ago 3521 years ago Generate time ago from date 1 second ago 1 minute ago 1 hour ago 1 day ago 1 week ago 1 month ago 1 year ago Generate time ago from date with random number 58 minutes, 41 seconds ago 2 days, 10 hours, 41 minutes ago 4 months, 3 weeks, 5 days, 17 hours ago 9 years, 7 months, 3 weeks, 5 days ago 67 years, 6 months, 1 week, 5 days ago 289 years, 4 months, 3 weeks, 4 days ago 3521 years ago Generate time ago from with random number and 2 levels 58 minutes, 41 seconds ago 2 days, 10 hours ago 4 months, 3 weeks ago 9 years, 7 months ago 67 years, 6 months ago 289 years, 4 months ago 3521 years ago

References

Источник

Java Date and Time

Java does not have a built-in Date class, but we can import the java.time package to work with the date and time API. The package includes many date and time classes. For example:

Class Description
LocalDate Represents a date (year, month, day (yyyy-MM-dd))
LocalTime Represents a time (hour, minute, second and nanoseconds (HH-mm-ss-ns))
LocalDateTime Represents both a date and a time (yyyy-MM-dd-HH-mm-ss-ns)
DateTimeFormatter Formatter 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 class, and use its now() method:

Example

import java.time.LocalDate; // import the LocalDate class public class Main < public static void main(String[] args) < LocalDate myObj = LocalDate.now(); // Create a date object System.out.println(myObj); // Display the current date >> 

Display Current Time

To display the current time (hour, minute, second, and nanoseconds), import the java.time.LocalTime class, and use its now() method:

Example

import java.time.LocalTime; // import the LocalTime class public class Main < public static void main(String[] args) < LocalTime myObj = LocalTime.now(); System.out.println(myObj); >> 

Display Current Date and Time

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

Example

import java.time.LocalDateTime; // import the LocalDateTime class public class Main < public static void main(String[] args) < LocalDateTime myObj = LocalDateTime.now(); System.out.println(myObj); >> 

Formatting Date and Time

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

Example

import java.time.LocalDateTime; // Import the LocalDateTime class import java.time.format.DateTimeFormatter; // Import the DateTimeFormatter class public class Main < public static void main(String[] args) < LocalDateTime myDateObj = LocalDateTime.now(); System.out.println("Before formatting: " + myDateObj); DateTimeFormatter myFormatObj = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss"); String formattedDate = myDateObj.format(myFormatObj); System.out.println("After formatting: " + formattedDate); >> 

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

Value Example Tryit
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 »

Источник

Оцените статью