Как преобразовать текущую дату в строку в 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();
jasonmp85
источник
58
Ну извини за перевыполнение.
jasonmp85
2
Формат, используемый этим методом, ужасен. Кроме того, неявно применяется текущий часовой пояс вашего KVM по умолчанию, поэтому ваши результаты будут отличаться. И эти проблемные классы теперь унаследованы, их заменили классы java.time. См. Учебное пособие по Oracle .
Basil
19

Используйте DateFormatреализацию; напр SimpleDateFormat.

DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
String data = df.format(new Date());
Адамский
источник
К вашему сведению, эти проблемные классы теперь унаследованы, их заменили классы 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, и более .

Василий Бурк
источник
9

Быстрее :

String date = FastDateFormat.getInstance("dd-MM-yyyy").format(System.currentTimeMillis( ));
Иоганн Гулли
источник
4
Требуется org.apache.commons
Джозайя Йодер
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формате в свою функцию.
Джерин Джозеф