Как преобразовать текущую дату в строку в Java?


Ответы:


216
String date = new SimpleDateFormat("dd-MM-yyyy").format(new Date());

Использовал комбинацию этого и ответ прямо ниже для строки времени. C:
php_coder_3809625

@Ian Purton Строковая дата в формате UTC tz ..?
Канагавелу Сугумар

К вашему сведению, эти проблемные классы теперь унаследованы, их заменили классы java.time. См. Учебное пособие по Oracle .
Basil

62
// GET DATE & TIME IN ANY FORMAT
import java.util.Calendar;
import java.text.SimpleDateFormat;
public static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss";

public static String now() {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
return sdf.format(cal.getTime());
}

Взято отсюда


Лучший ответ для использования календаря вместо даты.
Random

5
Я запутался. В какой вселенной Calendarжелательнее Date?
jasonmp85 03

1
К вашему сведению, эти проблемные классы теперь унаследованы, их заменили классы java.time. См. Учебное пособие по Oracle .
Basil

27
// On the form: dow mon dd hh:mm:ss zzz yyyy
new Date().toString();

58
Ну извини за перевыполнение.
jasonmp85

2
Формат, используемый этим методом, ужасен. Кроме того, неявно применяется текущий часовой пояс вашего KVM по умолчанию, поэтому ваши результаты будут отличаться. И эти проблемные классы теперь унаследованы, их заменили классы java.time. См. Учебное пособие по Oracle .
Basil


14

ТЛ; др

LocalDate.now()
         .toString() 

2017-01-23

Лучше явно указать желаемый / ожидаемый часовой пояс.

LocalDate.now( ZoneId.of( "America/Montreal" ) )
         .toString() 

java.time

Современный способ, начиная с Java 8 и более поздних версий, связан с фреймворком java.time .

Укажите часовой пояс, так как дата в любой момент может меняться по всему миру.

ZoneId zoneId = ZoneId.of( "America/Montreal" ) ;  // Or ZoneOffset.UTC or ZoneId.systemDefault()
LocalDate today = LocalDate.now( zoneId ) ;
String output = today.toString() ;

2017-01-23

По умолчанию вы получаете строку в стандартном формате ISO 8601 .

Для других форматов используйте java.time.format.DateTimeFormatterкласс.


О java.time

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

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

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

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

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

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

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



1

Для времени в формате ГГГГ-ММ-дд

String time = new DateTime( yourData ).toString("yyyy-MM-dd");

А библиотека DateTime:

import org.joda.time.DateTime;


А из какой библиотеки DateTime? В ответе на переполнение стека должно быть какое-то объяснение, так как этот сайт должен быть чем-то большим, чем библиотека сниппетов.
Basil

0

Большинство ответов верны. Новая модификация JAVA API для обработки даты позволила уменьшить некоторую ранее существовавшую двусмысленность в обработке даты Java.

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

new Date() // deprecated

Вышеупомянутый вызов заставил разработчика предположить, что новый объект Date предоставит объект Date с текущей меткой времени. Такое поведение не согласуется с другими классами Java API.

Новый способ сделать это - использовать экземпляр календаря .

new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()

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

Это больше похоже на реальную жизнь

  1. Получаем объект Calendar и ищем в нем время. (вы, должно быть, удивляетесь, что никто не получает время из календаря, поэтому я сказал, что он не идеален, но это совсем другая тема)
  2. Затем нам нужна дата в простом текстовом формате, поэтому мы используем служебный класс SimpleDateFormat, который помогает нам форматировать дату из шага 1. Я использовал yyyy, MM, dd в качестве параметров в формате. Поддерживаемые параметры формата даты

Еще один способ сделать это - использовать Joda time API.

new DateTime().toString("yyyy-MM-dd")

или гораздо очевиднее

new DateTime(Calendar.getInstance().getTime()).toString("yyyy-MM-dd")

оба вернут тот же результат.


FYI, хлопотно старые классы даты и времени , такие как java.util.Date, java.util.Calendarи java.text.SimpleTextFormatтеперь наследие , вытесняется java.time классов. Кроме того, проект Joda-Time теперь находится в режиме обслуживания , и команда советует перейти на java.time.
Basil

1
@BasilBourque Это то, что я имел в виду в своем ответе, что ответ, получивший наибольшее количество голосов, правильный, но не имеет отношения к нынешнему разработчику. Наконец, в java будет класс Clock, и Clock.getTime () будет намного более разумным и имитирующим реальную жизнь, чем классы Date, DateTime или Time. Разработчики Java должны знать, что OOPS начиналось как нечто, имитирующее сценарии реальной жизни.
Swapnil Vargaonkar

К вашему сведению, Clockреализация в Java 8 точно такая же, как и у унаследованных классов. Только в Java 9 появилась новая реализация, способная фиксировать текущий момент с разрешением до наносекунд.
Basil

Да, именно по этой причине я написал «наконец». В Java будет класс Clock, который будет имитировать сценарий реальной жизни (концепция OOPS) и отображать / фиксировать (как вы бы предпочли это сказать) текущий момент.
Swapnil Vargaonkar

-2
public static Date getDateByString(String dateTime) {
        if(dateTime==null || dateTime.isEmpty()) {
            return null;
        }
        else{
            String modified = dateTime + ".000+0000";
            DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
            Date dateObj = new Date();
            Date dateObj1 = new Date();
            try {
                if (dateTime != null) {
                    dateObj = formatter.parse(modified);
                }

            } catch (ParseException e) {
                e.printStackTrace();
            }

            return dateObj;
        }

    }

1
Некоторые пояснения к этому фрагменту кода, вероятно, были бы полезны.
Pyves

1
Ответ не имеет отношения к вопросу. И нет, вы не можете передать дату в любом Stringформате в свою функцию.
Джерин Джозеф
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.