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

Каков наилучший способ получить текущую дату/время в Java?

Ответ 1

Это зависит от того, какую форму даты/времени вы хотите:

  • Если вы хотите, чтобы дата/время представляли собой одно числовое значение, то System.currentTimeMillis() даст вам это, выраженное в количестве миллисекунд после эпохи UNIX (в виде long Java). Это значение является дельтой времени UTC и не зависит от локального часового пояса... при условии, что системные часы были установлены правильно.

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

    • new Date() дает вам объект Date инициализированный с текущей датой/временем. Проблема в том, что методы Date API в основном ошибочны... и устарели.

    • Calendar.getInstance() предоставляет вам объект Calendar инициализированный с текущей датой/временем, используя Locale по умолчанию и TimeZone. Другие перегрузки позволяют вам использовать конкретную Locale и/или TimeZone. Календарь работает... но API все еще громоздки.

    • new org.joda.time.DateTime() предоставляет вам объект Joda-time, инициализированный с текущей датой/временем, используя часовой пояс и хронологию по умолчанию. Есть много других альтернатив Joda... слишком много, чтобы описать здесь. (Но обратите внимание, что некоторые люди сообщают, что время Joda имеет проблемы с производительностью; например, LocalDateTime Jodatime работает медленно при первом использовании.)

    • в Java 8 вызов LocalDateTime.now() и ZonedDateTime.now() даст вам представление 1 для текущей даты/времени.

До Java 8 большинство людей, которые знают об этих вещах, рекомендовали Joda-time как обладающую (безусловно) лучшими API-интерфейсами Java для выполнения задач, связанных с вычислением момента и продолжительности. С Java 8 это больше не так. Однако, если вы уже используете Joda время в вашем коде, нет сильной 2 причины миграции.


1 - Обратите внимание, что LocalDateTime не включает часовой пояс.Как говорит Javadoc: "Он не может представлять момент на временной шкале без дополнительной информации, такой как смещение или часовой пояс".

2 - Ваш код не сломается, если вы этого не сделаете, и вы не получите предупреждения об устаревании.Конечно, кодовая база Joda, вероятно, перестанет получать обновления, но вряд ли они понадобятся.Отсутствие обновлений означает стабильность, и это хорошо.Также обратите внимание, что весьма вероятно, что в этом случае кто-то исправит проблемы, вызванные регрессиями на платформе Java.

Ответ 2

Если вам просто нужно вывести отметку времени в формате YYYY.MM.DD-HH.MM.SS(очень частый случай), то вот как это сделать:

String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());

Ответ 3

Если вы хотите, чтобы текущая дата была String, попробуйте следующее:

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/

Ответ 4

В Java 8 это:

LocalDateTime.now()

и если вам нужна информация о часовом поясе:

ZonedDateTime.now()

и в случае, если вы хотите напечатать строку с фантастическим форматированием:

System.out.println(ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME))

Ответ 5

Просто создайте объект Date...

Date date = new Date();

Ответ 6

    // 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() );

Ответ 7

ТЛ; др

Instant.now()                         // Capture the current moment in UTC, with a resolution of nanoseconds. Returns a 'Instant' object.

... или...

ZonedDateTime.now(                    // Capture the current moment as seen in…
    ZoneId.of( "America/Montreal" )   // … the wall-clock time used by the people of a particular region (a time zone).
)                                     // Returns a 'ZonedDateTime' object.

java.time

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

enter image description here

Часовой пояс

Другие ответы не объясняют, как часовой пояс имеет решающее значение при определении текущей даты и времени. В любой момент времени дата и время варьируются по всему земному шару в зависимости от зоны. Например, несколько минут после полуночи - это новый день в Париже, Франция, который все еще остается "вчера" в Монреале, Квебеке.

Instant

Большая часть вашей бизнес-логики и хранения/обмена данными должна выполняться в UTC, в качестве лучшей практики.

Чтобы получить текущий момент в UTC с разрешением в наносекундах, используйте класс Instant. Обычные часы компьютерного оборудования ограничены в своей точности, поэтому текущий момент может быть зафиксирован в миллисекундах или микросекундах, а не в наносекундах.

Instant instant = Instant.now();

ZonedDateTime

Вы можете настроить этот Instant на другие часовые пояса. Примените объект ZoneId, чтобы получить ZonedDateTime.

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );

Мы можем пропустить Instant и получить текущий ZonedDateTime напрямую.

ZonedDateTime zdt = ZonedDateTime.now( z );

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

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, когда вам нужен фактический момент на временной шкале. Типы Local… специально не имеют понятия часового пояса, поэтому они представляют лишь приблизительное представление о возможном моменте. Чтобы получить фактический момент, вы должны назначить часовой пояс для преобразования типов Local… в ZonedDateTime и тем самым сделать его осмысленным.

LocalDate

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

ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );  // Always pass a time zone.

Струны

Чтобы сгенерировать строку, представляющую значение даты и времени, просто вызовите toString в классах java.time для стандартных форматов ISO 8601.

String output = myLocalDate.toString();  // 2016-09-23

... или...

String output = zdt.toString();  // 2016-09-23T12:34:56.789+03:00[America/Montreal]

Класс ZonedDateTime расширяет стандартный формат, разумно добавляя название часового пояса в квадратных скобках.

Для других форматов найдите в Qaru множество вопросов и ответов в классе DateTimeFormatter.

Избегайте LocalDateTime

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

В LocalDateTime преднамеренно отсутствует какая-либо информация о часовом поясе или смещении от UTC. Таким образом, это не подходит, когда вы отслеживаете определенный момент на временной шкале. Конечно, не подходит для захвата текущего момента.

У LocalDateTime есть только дата и время суток, такие как "полдень 23 января 2020 года", но мы не знаем, будет ли это полдень в Токио, Япония, или полдень в Толедо, Огайо, США, два разных момента, много часов друг от друга.

"Локальная" формулировка нелогична. Это означает любую местность, а не одну конкретную местность. Например, Рождество этого года начинается в полночь 25 декабря: 2017-12-25T00:00:00, которое должно быть представлено как LocalDateTime. Но это означает полночь в разных точках земного шара в разное время. Полночь наступает сначала в Кирибати, позже в Новой Зеландии, спустя несколько часов в Индии и т.д., Еще несколько часов проходит до того, как Рождество начинается во Франции, когда дети в Канаде все еще ждут этого дня. Каждая из этих рождественских стартовых точек будет представлена как отдельная ZonedDateTime.


Из-за пределов вашей системы

Если вы не можете доверять системным часам, см. Java: получение текущей даты и времени с сервера, а не системных часов и моего ответа.

photo of a couple of external radio clock devices

java.time.Clock

Чтобы использовать альтернативного поставщика текущего момента, напишите подкласс абстрактного класса java.time.Clock.

Вы можете передать свою реализацию Clock в качестве аргумента различным методам java.time. Например, Instant.now( clock ).

Instant instant = Instant.now( yourClockGoesHere ) ;

В целях тестирования обратите внимание на альтернативные реализации Clock, доступные статически из самого Clock: fixed, offset, tick и другие.


О java.time

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

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

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

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

Где взять классы java.time?

  • Java SE 8, Java SE 9, Java SE 10, Java SE 11 и более поздние версии - часть стандартного Java API с встроенной реализацией ,
    • Java 9 добавляет некоторые мелкие функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональности java.time перенесена на Java 6 & 7 в ThreeTen-Backport.
  • Android

Table of which java.time library to use with which version of Java or Android

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

Ответ 8

Использование:

String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
System.out.println(timeStamp );

(Он работает.)

Ответ 10

Создайте объект даты и просто распечатайте его.

Date d = new Date(System.currentTimeMillis());
System.out.print(d);

Ответ 11

Аналогично описанным выше решениям. Но я всегда искал этот кусок кода:

Date date=Calendar.getInstance().getTime();
System.out.println(date);

Ответ 12

Вы посмотрели на java.util.Date? Это именно то, что вы хотите.

Ответ 13

java.util.Date date = new java.util.Date();

Он автоматически заполняется с момента его создания.

Ответ 14

1st Понять класс java.util.Date

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);
    }
}

Также попробуйте использовать различные шаблоны формата, такие как "yyyy-MM-dd hh: mm: ss" и выберите желаемый шаблон. http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

2nd Понять класс java.util.Calendar

2.1 Использование класса Calendar для получения текущей метки времени

import java.util.Calendar;

class Demostration{
    public static void main(String[]args){
        Calendar calendar=Calendar.getInstance();
        System.out.println(calendar.getTime());
    }
}

2.2 Попробуйте использовать setTime и другие методы набора для установки календаря на другую дату.

Источник: http://javau91.blogspot.com/

Ответ 15

Для java.util.Date, просто создайте новую дату()

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.util.Calendar используется Calendar.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.time.LocalDateTime, использует LocalDateTime.now()

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.time.LocalDate, использует LocalDate.now()

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/

Ответ 16

Я считаю, что это лучший способ:

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

Ответ 17

Использование:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd::HH:mm:ss");
System.out.println(sdf.format(System.currentTimeMillis()));

Оператор печати будет печатать время, когда он вызывается, а не когда был создан SimpleDateFormat. Поэтому его можно многократно вызывать без создания каких-либо новых объектов.

Ответ 18

Посмотрите на класс Date. Также существует новый класс Calendar, который является предпочтительным методом выполнения многих операций даты и времени (многие методы в Дате устарели.)

Если вам просто нужна текущая дата, либо создайте новый объект Date, либо вызовите Calendar.getInstance();.

Ответ 19

Как уже упоминалось, базовая Date() может делать то, что вам нужно, с точки зрения получения текущего времени. В моем недавнем опыте работы с датами Java существует много странностей со встроенными классами (а также устаревание многих методов класса Date). Одна странность, которая выделялась для меня, заключалась в том, что месяцы основаны на индексе 0, который с технической точки зрения имеет смысл, но в реальном выражении может быть очень запутанным.

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

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

Ответ 20

Новый Data-Time API представлен на заре Java 8. Это связано со следующими проблемами, которые были вызваны в старом Data-Time API.

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

Не потокобезопасен: java.util.Date не является потокобезопасным.

Так что посмотрите вокруг с 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

Ответ 21

 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

Ответ 22

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 получить формат

Ответ 23

Я создал эти методы, это работает для меня...

public String GetDay() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("dd")));
}

public String GetNameOfTheDay() {
    return String.valueOf(LocalDateTime.now().getDayOfWeek());
}

public String GetMonth() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("MM")));
}

public String GetNameOfTheMonth() {
    return String.valueOf(LocalDateTime.now().getMonth());
}

public String GetYear() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy")));
}

public boolean isLeapYear(long year) {
    return Year.isLeap(year);
}

public String GetDate() {
    return GetDay() + "/" + GetMonth() + "/" + GetYear();
}

public String Get12HHour() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("hh")));
}

public String Get24HHour() {
    return String.valueOf(LocalDateTime.now().getHour());
}

public String GetMinutes() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("mm")));
}

public String GetSeconds() {
    return String.valueOf(LocalDateTime.now().format(DateTimeFormatter.ofPattern("ss")));
}

public String Get24HTime() {
    return Get24HHour() + ":" + GetMinutes();
}

public String Get24HFullTime() {
    return Get24HHour() + ":" + GetMinutes() + ":" + GetSeconds();
}

public String Get12HTime() {
    return Get12HHour() + ":" + GetMinutes();
}

public String Get12HFullTime() {
    return Get12HHour() + ":" + GetMinutes() + ":" + GetSeconds();
}

Ответ 24

Вы можете использовать объект и формат 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 doc:

Класс Date представляет определенный момент времени, с миллисекундой точность.

До JDK 1.1 класс Date имел две дополнительные функции. Это позволили интерпретировать даты как год, месяц, день, час, минуту, и вторых значений. Это также позволило форматировать и разбор даты строки. К сожалению, API для этих функций не поддавался к интернационализации. Начиная с JDK 1.1, класс Calendar должен быть используется для преобразования между полями даты и времени и классом DateFormat следует использовать для форматирования и синтаксического анализа строк даты. Соответствующий методы в Дате устарели.

Таким образом, вы можете использовать Calendar класс,

Calendar.YEAR;
//and lot more

Чтобы получить текущее время, вы можете использовать:

Calendar rightNow = Calendar.getInstance();

Doc:

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

Ниже код для получения только даты

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);

Прочтите это Учебник Jakob Jenkov: Java SimpleDateFormat.

Как уже упоминалось, когда нам нужно делать манипуляции с датами, у нас не было простого и лучшего способа, или мы не смогли удовлетворить встроенные классы API.

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

Также читайте:

. Самое счастливое в настоящее время (в 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.

И помните, чтобы узнать больше о дате и времени Java, потому что есть много способов и/или полезных способов, которые вы можете получить/использовать.

EDIT:

Согласно комментарию @BasilBourque, неудобные старые классы времени, такие как java.util.Date, java.util.Calendar и java.text.SimpleTextFormat теперь legacy, вытесненный java.time classes.

Ответ 25

Я пойду вперед и поставлю этот ответ, потому что это все, что мне нужно, когда у меня был такой же вопрос:

Date currentDate = new Date(System.currentTimeMillis());

currentDate теперь является вашей текущей датой в объекте Java Date.

Ответ 26

просто попробуйте этот код:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class CurrentTimeDateCalendar {
    public static void getCurrentTimeUsingDate() {
        Date date = new Date();
        String strDateFormat = "hh:mm:ss a";
        DateFormat dateFormat = new SimpleDateFormat(strDateFormat);
        String formattedDate= dateFormat.format(date);
        System.out.println("Current time of the day using Date - 12 hour format: " + formattedDate);
    }
    public static void getCurrentTimeUsingCalendar() {
        Calendar cal = Calendar.getInstance();
        Date date=cal.getTime();
        DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
        String formattedDate=dateFormat.format(date);
        System.out.println("Current time of the day using Calendar - 24 hour format: "+ formattedDate);
    }
}

какой пример вывода:

Текущее время дня с использованием даты - 12-часовой формат: 11:13:01 PM

Текущее время дня с использованием Календаря - 24-часовой формат: 23:13:01

больше информации о:

Получение текущей даты и времени в Java