Як перетворити поточну дату в рядок у 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.