Как получить текущую дату/время в Java
каков наилучший способ получить текущую дату / время в Java?
24 ответов
это зависит от того, какую форму даты / времени вы хотите:
если вы хотите дату / время как одно числовое значение, то
System.currentTimeMillis()
дает вам это, выраженное как количество миллисекунд после эпохи UNIX (как Javalong
). Это значение является дельтой от точки времени UTC и не зависит от локального часового пояса ... при условии, что системные часы установлены правильно.-
если вы хотите дату / время в форме, позволяет получить доступ к компонентам (год, месяц и т. д.) численно, можно использовать один из следующих:
new Date()
даетDate
объект инициализирован текущей датой / временем. Проблема в том, чтоDate
методы API в основном ущербные ... и осужден.Calendar.getInstance()
даетCalendar
объект инициализируется текущей датой / временем, используя значение по умолчаниюLocale
иTimeZone
. Другие перегрузки позволяют использовать специфическийLocale
и/илиTimeZone
. Календарь работает ... но APIs все еще громоздки.new org.joda.time.DateTime()
дает Joda времени объект инициализируется текущей датой / временем, используя часовой пояс и хронологию по умолчанию. Есть много других альтернатив Joda ... слишком много, чтобы описать здесь. (Но обратите внимание, что некоторые люди сообщают, что у Joda time есть проблемы с производительностью.; например,LocalDateTime Jodatime медленно при использовании первого время.)в Java 8 вызов
LocalDateTime.now()
иZonedDateTime.now()
даст вам представления1 для текущей даты / времени.
до Java 8, большинство людей, которые знают об этих вещах рекомендовано Joda времени как имеющий (на сегодняшний день) лучшие API Java для выполнения вещей, связанных с вычислениями точки времени и продолжительности. С Java 8 это больше не верно. Однако, если вы уже используя время Joda в вашей кодовой базе, нет сильного2 причина для переноса.
1 - Обратите внимание, что LocalDateTime не включает часовой пояс. Как говорит javadoc: " он не может представлять момент времени без дополнительной информации, такой как смещение или часовой пояс."
2 - код не сломается, если вы не, и вы не получите предупреждения. Конечно, кодовая база Joda, вероятно, будет перестаньте получать обновления, но вряд ли они вам понадобятся. Отсутствие обновлений означает стабильность, и это хороший вещь.
Если вам просто нужно вывести отметку времени в формате гггг.Мм ДД-ХХ.Мм SS (очень частый случай) тогда вот как это сделать:
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
Если вы хотите текущую дату в виде строки, попробуйте следующее:
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date));
или
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));
http://www.mkyong.com/java/java-how-to-get-current-date-time-date-and-calender/
на Java 8 это:
LocalDateTime.now()
и в случае, если вам нужна информация о часовом поясе:
ZonedDateTime.now()
и в случае, если вы хотите напечатать необычные отформатированную строку:
System.out.println(ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME))
// 2015/09/27 15:07:53
System.out.println( new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(Calendar.getInstance().getTime()) );
// 15:07:53
System.out.println( new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()) );
// 09/28/2015
System.out.println(new SimpleDateFormat("MM/dd/yyyy").format(Calendar.getInstance().getTime()));
// 20150928_161823
System.out.println( new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime()) );
// Mon Sep 28 16:24:28 CEST 2015
System.out.println( Calendar.getInstance().getTime() );
// Mon Sep 28 16:24:51 CEST 2015
System.out.println( new Date(System.currentTimeMillis()) );
// Mon Sep 28
System.out.println( new Date().toString().substring(0, 10) );
// 2015-09-28
System.out.println( new java.sql.Date(System.currentTimeMillis()) );
// 14:32:26
Date d = new Date();
System.out.println( (d.getTime() / 1000 / 60 / 60) % 24 + ":" + (d.getTime() / 1000 / 60) % 60 + ":" + (d.getTime() / 1000) % 60 );
// 2015-09-28 17:12:35.584
System.out.println( new Timestamp(System.currentTimeMillis()) );
// Java 8
// 2015-09-28T16:16:23.308+02:00[Europe/Belgrade]
System.out.println( ZonedDateTime.now() );
// Mon, 28 Sep 2015 16:16:23 +0200
System.out.println( ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME) );
// 2015-09-28
System.out.println( LocalDate.now(ZoneId.of("Europe/Paris")) ); // rest zones id in ZoneId class
// 16
System.out.println( LocalTime.now().getHour() );
// 2015-09-28T16:16:23.315
System.out.println( LocalDateTime.now() );
tl; dr
Instant.now() // Capture the current moment in UTC, with a resolution of nanoseconds.
... и ...
ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) // Capture the current moment as seen in the wall-clock time used by the people of a particular region (a time zone).
java.время
в нескольких ответах упоминается, что java.время классы являются современной заменой для проблемных старых устаревших классов даты и времени в комплекте с самыми ранними версиями Java. Ниже немного больше информации.
часовой пояс
в других ответах не объясняется, как часовой пояс имеет решающее значение для определения текущей даты и времени. Для любого данного момент, дата и время варьируется по всему миру по зонам. Например, несколько минут после полуночи новый день в Париж, Франция будучи еще "вчера" в Квебека Монреале.
Instant
большая часть вашей бизнес-логики и хранения данных / обмена должна быть выполнена в UTC, как лучшая практика. Чтобы получить текущий момент в UTC с разрешением в наносекунд используйте Instant
класса.
Instant instant = Instant.now();
ZonedDateTime
вы можете настроить это Instant
в другие часовые пояса. Применить ZoneId
объект, чтобы получить ZonedDateTime
.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
мы можем пропустить Instant
и получаем ток!--13--> напрямую.
ZonedDateTime zdt = ZonedDateTime.now( z );
всегда передавайте этот необязательный аргумент часового пояса. Если опущено, применяется текущий часовой пояс JVM по умолчанию. Этот значение по умолчанию может изменяться в любой момент, даже во время во время выполнения. Не подвергайте приложение воздействию внешних факторов, не зависящих от вас. Всегда указывайте желаемый / ожидаемый часовой пояс.
ZonedDateTime do_Not_Do_This = ZonedDateTime.now(); // BAD - Never rely implicitly on the current default time zone.
вы можете позже извлечь Instant
С ZonedDateTime
.
Instant instant = zdt.toInstant();
всегда используйте Instant
или ZonedDateTime
, а не LocalDateTime
если вы хотите реальный момент на временной шкале. The Local…
типы намеренно не имеют понятия о времени поэтому они представляют собой лишь приблизительное представление о возможном моменте. Чтобы получить фактический момент, Вы должны назначить часовой пояс для преобразования Local…
типы в ZonedDateTime
и тем самым сделать его осмысленным.
LocalDate
на LocalDate
класс представляет значение только даты без времени суток и без часового пояса.
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z ); // Always pass a time zone.
строки
чтобы создать строку, представляющую значение даты и времени, просто вызовите toString
на Ява.время занятий по стандарту ISO 8601 форматы.
String output = myLocalDate.toString(); // 2016-09-23
... и ...
String output = zdt.toString(); // 2016-09-23T12:34:56.789+03:00[America/Montreal]
на ZonedDateTime
класс расширяет стандартный формат, мудро добавив имя часового пояса в квадратных скобках.
для других форматов, переполнение стека поиска для многих вопросов и ответов на DateTimeFormatter
класса.
избежать LocalDateTime
вопреки комментарию на вопрос Рамансба, вы должен!--67-->не использовать LocalDateTime
класс для текущей даты и времени.
на LocalDateTime
намеренно отсутствует какой-либо часовой пояс или смещение от UTC информации. Итак, это не уместно, когда вы отслеживаете определенный момент на временной шкале. Конечно не подходит для захвата текущего момента.
" локальная " формулировка противоречит интуиции. Это значит любой населенный пункт, а не любой специфическая местность. Например, Рождество в этом году начинается в полночь 25 декабря:2017-12-25T00:00:00
, быть представленным как LocalDateTime
. Но это означает полночь в разных точках земного шара в разное время. Полночь случается первой в Кирибати, позже в Новой Зеландии, еще через несколько часов в Индии и так далее, и еще несколько часов до Рождества начинается во Франции, когда дети в Канаде все еще ждут этого дня. Каждый из этих рождественских стартовых пунктов будет представлен как отдельный ZonedDateTime
.
извне вашей системы
если вы не можете доверять ваши часы, увидеть Java: получить текущую дату и время с сервера не системные часы и мой ответ:.
java.time.Clock
чтобы использовать альтернативного поставщика текущего момента, напишите подкласс абстрактного java.time.Clock
класса.
вы можете передать свой Clock
реализация в качестве аргумента для различных java.время методы. Например, Instant.now( clock )
.
Instant instant = Instant.now( yourClockGoesHere ) ;
для целей тестирования, обратите внимание на альтернативных реализаций Clock
доступные статически от : fixed
, offset
, tick
и многое другое.
о java.время
на java.время framework встроен в Java 8 и более поздние версии. Эти классы вытесняют беспокойных старых наследие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
на Joda Времени, теперь режим обслуживания, советует переход к java.время классы.
чтобы узнать больше, см. Oracle Tutorial. И search Stack Overflow для многих примеров и объяснений. Спецификация JSR 310.
вы можете обменять java.время объекты непосредственно с вашей базой данных. Используйте драйвер JDBC соответствуют JDBC 4.2 или позже. Нет необходимости в строках, нет необходимости в java.sql.*
занятия.
где получить java.время занятий?
-
Java SE 8, Java SE 9, и позже
- встроенный.
- часть стандартного API Java со встроенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
-
Java SE 6 и Java SE 7
- большая часть java.функциональность времени обратно портирована на Java 6 & 7 в ThreeTen-Backport.
-
Android
- более поздние версии Android bundle реализации java.классы время.
- для более раннего Android, ThreeTenABP проект приспосабливается ThreeTen-Backport (упоминалось выше). См.как использовать ThreeTenABP....
на ThreeTen-Extra проект расширяет java.время с дополнительными занятиями. Этот проект является испытательной площадкой для возможных будущих дополнений к java.время. Вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и больше.
использование:
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
System.out.println(timeStamp );
(оно работает.)
создайте объект даты и просто распечатайте его.
Date d = new Date(System.currentTimeMillis());
System.out.print(d);
подобно вышеуказанным решениям. Но я всегда нахожу, что ищу этот кусок кода:
Date date=Calendar.getInstance().getTime();
System.out.println(date);
Я считаю, что это лучший способ:
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime())); // 2014/08/06 16:00:22
1-й поймите java.утиль.Класс даты
1.1 Как получить текущую дату
import java.util.Date;
class Demostration{
public static void main(String[]args){
Date date = new Date(); // date object
System.out.println(date); // Try to print the date object
}
}
1.2 Как использовать метод getTime ()
import java.util.Date;
public class Main {
public static void main(String[]args){
Date date = new Date();
long timeInMilliSeconds = date.getTime();
System.out.println(timeInMilliSeconds);
}
}
это вернет количество миллисекунд с 1 января 1970 года, 00:00: 00 GMT для целей сравнения времени.
1.3 как форматировать время с помощью класса SimpleDateFormat
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
class Demostration{
public static void main(String[]args){
Date date=new Date();
DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
String formattedDate=dateFormat.format(date);
System.out.println(formattedDate);
}
}
также попробуйте использовать различные шаблоны формата как "гггг-ММ-ДД чч:мм:СС" и выберите нужный узор. http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
2-й поймите java.утиль.Класс календаря
2.1 использование класса календаря для получения текущей отметки времени
import java.util.Calendar;
class Demostration{
public static void main(String[]args){
Calendar calendar=Calendar.getInstance();
System.out.println(calendar.getTime());
}
}
2.2 попробуйте использовать setTime и другие методы set для установки календаря на другую дату.
источник:http://javau91.blogspot.com/
использование:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd::HH:mm:ss");
System.out.println(sdf.format(System.currentTimeMillis()));
оператор print будет печатать время, когда он вызывается, а не когда . Поэтому его можно вызывать повторно, не создавая никаких новых объектов.
для java.утиль.Дата, просто создайте новую дату ()
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date)); //2016/11/16 12:08:43
для java.утиль.Календарь, использует календарь.getInstance ()
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal)); //2016/11/16 12:08:43
для java.время.LocalDateTime, использует LocalDateTime.сейчас()
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
System.out.println(dtf.format(now)); //2016/11/16 12:08:43
для java.время.LocalDate, использует LocalDate.сейчас()
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd");
LocalDate localDate = LocalDate.now();
System.out.println(dtf.format(localDate)); //2016/11/16
ссылка: https://www.mkyong.com/java/java-how-to-get-current-date-time-date-and-calender/
Как уже упоминалось, основная дата() может делать то, что вам нужно с точки зрения получения текущего времени. В моем недавнем опыте работы с датами Java есть много странностей со встроенными классами (а также устаревание многих методов класса Date). Одна странность, которая выделилась для меня было, что месяцев индекс 0, который с технической точки зрения имеет смысл, но в реальном выражении может быть очень запутанной.
Если вас интересует только текущая дата, которая должно быть достаточно-однако, если вы собираетесь делать много манипуляций / вычислений с датами, было бы очень полезно использовать стороннюю библиотеку (так много существует, потому что многие разработчики Java не удовлетворены встроенной функциональностью).
Я поддерживаю рекомендацию Стивена C, поскольку я нашел Joda-time очень полезным в упрощении моей работы с датами, она также очень хорошо документирована, и вы можете найти много полезных примеров по всему интернету. Я даже закончил писать статический класс-оболочка (как DateUtils), который я использую для консолидации и упрощения всех моих общих манипуляций с датой.
import java.util.*;
import java.text.*;
public class DateDemo {
public static void main(String args[]) {
Date dNow = new Date( );
SimpleDateFormat ft =
new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("Current Date: " + ft.format(dNow));
}
}
вы можете использовать дату для текущих данных fet. Итак, используя
SimpleDateFormat
вам формате
System.out.println( new SimpleDateFormat("yyyy:MM:dd - hh:mm:ss a").format(Calendar.getInstance().getTime()) );
//2018:02:10 - 05:04:20 PM
дата/время с AM / PM
новый API времени данных вводится с рассветом Java 8. Это связано к следующим проблемам, которые были вызваны в старом API времени данных.
трудно обрабатывать часовой пояс : нужно написать много кода, чтобы иметь дело с часовой пояс.
не потокобезопасно: java.утиль.Дата не является потокобезопасной.
Так что посмотрите вокруг С Java 8
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.Month;
public class DataTimeChecker {
public static void main(String args[]) {
DataTimeChecker dateTimeChecker = new DataTimeChecker();
dateTimeChecker.DateTime();
}
public void DateTime() {
// Get the current date and time
LocalDateTime currentTime = LocalDateTime.now();
System.out.println("Current DateTime: " + currentTime);
LocalDate date1 = currentTime.toLocalDate();
System.out.println("Date : " + date1);
Month month = currentTime.getMonth();
int day = currentTime.getDayOfMonth();
int seconds = currentTime.getSecond();
System.out.println("Month : " + month);
System.out.println("Day : " + day);
System.out.println("Seconds : " + seconds);
LocalDateTime date2 = currentTime.withDayOfMonth(17).withYear(2018);
System.out.println("Date : " + date2);
//Prints 17 May 2018
LocalDate date3 = LocalDate.of(2018, Month.MAY, 17);
System.out.println("Date : " + date3);
//Prints 04 hour 45 minutes
LocalTime date4 = LocalTime.of(4, 45);
System.out.println("Date : " + date4);
// Convert to a String
LocalTime date5 = LocalTime.parse("20:15:30");
System.out.println("Date : " + date5);
}
}
вывод кодировки выше:
Current DateTime: 2018-05-17T04:40:34.603
Date : 2018-05-17
Month : MAY
Day : 17
Seconds : 34
Date : 2018-05-17T04:40:34.603
Date : 2018-05-17
Date : 04:45
Date : 20:15:30
можно использовать Date
объект и формат самостоятельно. Трудно форматировать и нужно больше кодов, например,
Date dateInstance = new Date();
int year = dateInstance.getYear()+1900;//Returns:the year represented by this date, minus 1900.
int date = dateInstance.getDate();
int month = dateInstance.getMonth();
int day = dateInstance.getDay();
int hours = dateInstance.getHours();
int min = dateInstance.getMinutes();
int sec = dateInstance.getSeconds();
String dayOfWeek = "";
switch(day){
case 0:
dayOfWeek = "Sunday";
break;
case 1:
dayOfWeek = "Monday";
break;
case 2:
dayOfWeek = "Tuesday";
break;
case 3:
dayOfWeek = "Wednesday";
break;
case 4:
dayOfWeek = "Thursday";
break;
case 5:
dayOfWeek = "Friday";
break;
case 6:
dayOfWeek = "Saturday";
break;
}
System.out.println("Date: " + year +"-"+ month + "-" + date + " "+ dayOfWeek);
System.out.println("Time: " + hours +":"+ min + ":" + sec);
выход:
Date: 2017-6-23 Sunday
Time: 14:6:20
как вы можете видеть, это худший способ, которым вы можете это сделать, и согласно документации oracle это устаревший.
Oracle doc:
дата класса представляет определенный момент времени, с миллисекундой точность.
до JDK 1.1, дата класса имела две дополнительные функции. Он допускается толкование дат как год, месяц, день, час, минута, и вторые ценности. Это также позволило форматирование и синтаксический анализ даты веревка. К сожалению, API для этих функций не поддается к интернационализации. Начиная с JDK 1.1, класс Calendar должен быть используется для преобразования между полями даты и времени и классом DateFormat следует использовать для форматирования и анализа строк даты. Соответствие методы на сегодняшний день являются не одобрять.
таким образом, вы можете использовать Calendar
класса,
Calendar.YEAR;
//and lot more
чтобы получить текущее время, вы можете использовать:
Calendar rightNow = Calendar.getInstance();
Doc:
как и другие классы, чувствительные к локали,
Calendar
предоставляет метод класса,getInstance
, для получения обычно полезного объекта этого типа. КалендарьgetInstance
метод возвращает
ниже код, чтобы получить только дату
Date rightNow = Calendar.getInstance().getTime();
System.out.println(rightNow);
и Calendar
класс имеет подклассы. GregorianCalendar
является одним из них и конкретным подклассом Calendar
и обеспечивает стандартную систему календаря, используемую большинством стран мира.
пример использования GregorianCalendar
:
Calendar cal = new GregorianCalendar();
int hours = cal.get(Calendar.HOUR);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
int ap = cal.get(Calendar.AM_PM);
String amVSpm;
if(ap == 0){
amVSpm = "AM";
}else{
amVSpm = "PM";
}
String timer = hours + "-" + minute + "-" + second + " " +amVSpm;
System.out.println(timer);
можно использовать SimpleDateFormat
, простой и быстрый способ форматирования даты:
String pattern = "yyyy-MM-dd";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);
читать это Якоб Jenkov учебник: Java SimpleDateFormat.
как уже упоминалось, когда нам нужно делать манипуляции с датами, у нас не было простого и лучшего способа или мы не могли удовлетворить встроенные классы, API.
в качестве примера, когда нам нужно получить разные между двумя датами, когда нам нужно сравнить две даты(есть встроенный метод для этого) и многое другое. Нам пришлось использовать сторонние библиотеки. Одним из хороших и популярных является Время Джода.
Читайте также:
- Как правильно получить текущую дату и время в Joda-Time?
- JodaTime-как получить текущее время в UTC
- примеры
JodaTime
. - Скачать Joda
. Самое счастливое сейчас (в java 8), никому не нужно скачивать и использовать библиотеки по каким-либо причинам. Простой пример получить текущую дату и время в Java 8,
LocalTime localTime = LocalTime.now();
System.out.println(localTime);
//with time zone
LocalTime localTimeWtZone = LocalTime.now(ZoneId.of("GMT+02:30"));
System.out.println(localTimeWtZone);
одним из хорошее сообщение в блоге, чтобы прочитать о Java 8 date.
и держите remeber, чтобы узнать больше о дате и времени Java, потому что есть намного больше способов и/или полезных способов, которые вы можете получить/использовать.
- Oracle учебники для даты и времени.
- Oracle учебники для форматирования.
- Урок: Стандартный Календарь.
EDIT:
согласно комментарию @BasilBourque, хлопотные старые классы даты и времени, такие как java.util.Date
, java.util.Calendar
и java.text.SimpleTextFormat
теперь наследие, взамен java.time
классы.
Я пойду вперед и брошу этот ответ, потому что это все, что мне нужно, когда у меня был тот же вопрос:
Date currentDate = new Date(System.currentTimeMillis());
currentDate
теперь ваша текущая дата в Java