Як перетворити поточну дату в рядок у Java?


Відповіді:


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

Використовували поєднання цього та відповіді внизу для тимчасового рядка. C:
php_coder_3809625

@Ian Purton Чи є строкова дата в UTC tz ..?
Канагавелу Сугумар

FYI, ці клопітні класи тепер застарілі, витіснені класами java.time. Дивіться навчальний посібник Oracle .
Василь Бурк

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

Взято звідси


Найкраща відповідь на використання календаря замість дати.
Випадково

5
Я збентежений. У якому Всесвіті Calendarбажаніше Date?
jasonmp85

1
FYI, ці клопітні класи тепер застарілі, витіснені класами java.time. Дивіться навчальний посібник Oracle .
Василь Бурк

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

58
Добре вибачте за перевиконання.
jasonmp85

2
Формат, використовуваний цим методом, жахливий. Крім того, поточний часовий пояс вашого KVM за замовчуванням застосовується неявно, тому ваші результати будуть різними. І ці клопітні заняття тепер застарілі, витіснені класами java.time. Дивіться навчальний посібник Oracle .
Василь Бурк


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 . І шукайте переповнення стека за багатьма прикладами та поясненнями. Специфікація - JSR 310 .

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

Де отримати класи java.time?

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



1

Протягом часу як РРРР-ММ-дд

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

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

імпорт org.joda.time.DateTime;


А з якої бібліотеки DateTime? Відповідь на переповнення стека повинна мати певне пояснення, оскільки цей сайт повинен бути більше, ніж бібліотека фрагментів.
Василь Бурк

0

Більшість відповідей є / були дійсними. Нова модифікація API JAVA для обробки дат забезпечила зменшення деякої попередньої неоднозначності в обробці дати Java.

Ви отримаєте застаріле повідомлення для подібних дзвінків.

new Date() // deprecated

Наведений вище виклик мав розробник припускати, що новий об’єкт Date надасть об'єкту Date з поточною міткою часу. Така поведінка не узгоджується з іншими класами Java API.

Новим способом цього є використання екземпляра календаря .

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

І тут конвенція про іменування не є досконалою, але це багато організовано. Для такої людини, як я, яка важко перебирає речі, але ніколи не забуде щось, якщо це звучить / здається логічним, це хороший підхід.

Це більше синоніму реального життя

  1. Ми отримуємо об’єкт Календар і шукаємо час у ньому. (Ви мусите цікаво, що жоден орган не отримує часу з Календаря, тому я сказав, що це не ідеально. Але це зовсім інша тема)
  2. Тоді ми хочемо дати у простому текстовому форматі, тому ми використовуємо утилітний клас SimpleDateFormat, який допомагає нам у форматуванні дати з кроку 1. Я використовував yyyy, MM, dd в якості параметрів у форматі. Підтримувані параметри формату дати

Ще один спосіб зробити це - використання API часу Joda

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.
Василь Бурк

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

FYI, Clockреалізація в Java 8 точно така ж, як і старі класи. Тільки в Java 9 з'являється нова реалізація, здатна фіксувати поточний момент з роздільною здатністю, тонкою, як наносекунди.
Василь Бурк

Так, саме тому я написав «нарешті» 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.