Bagaimana cara mengubah tanggal sekarang menjadi string di java?


Jawaban:



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

Diambil dari sini


Tanggapan terbaik untuk menggunakan Kalender daripada Tanggal.
Acak

5
Saya bingung. Di alam semesta mana yang Calendarlebih diinginkan daripada Date?
jasonmp85

1
FYI, class yang merepotkan ini sekarang sudah lama, digantikan oleh class java.time. Lihat Tutorial Oracle .
Basil Bourque

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

58
Maaf karena terlalu berprestasi.
jasonmp85

2
Format yang digunakan oleh metode itu sangat buruk. Selain itu, zona waktu default KVM Anda saat ini diterapkan secara implisit, sehingga hasil Anda akan bervariasi. Dan kelas-kelas yang merepotkan ini sekarang sudah lama, digantikan oleh kelas-kelas java.time. Lihat Tutorial Oracle .
Basil Bourque


14

tl; dr

LocalDate.now()
         .toString() 

2017-01-23

Lebih baik menentukan zona waktu yang diinginkan / diharapkan secara eksplisit.

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

java.time

Cara modern untuk Java 8 dan yang lebih baru adalah dengan framework java.time .

Tentukan zona waktu, karena tanggalnya bervariasi di seluruh dunia pada saat tertentu.

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

2017-01-23

Secara default Anda mendapatkan String dalam format ISO 8601 standar.

Untuk format lain gunakan java.time.format.DateTimeFormatterkelas.


Tentang java.time

The java.time kerangka dibangun ke Jawa 8 dan kemudian. Kelas-kelas ini menggantikan tua merepotkan warisan kelas tanggal-waktu seperti java.util.Date, Calendar, & SimpleDateFormat.

Proyek Joda-Time , sekarang dalam mode pemeliharaan , menyarankan migrasi ke kelas java.time .

Untuk mempelajari lebih lanjut, lihat Tutorial Oracle . Dan cari Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasinya adalah JSR 310 .

Anda dapat bertukar objek java.time langsung dengan database Anda. Gunakan driver JDBC yang sesuai dengan JDBC 4.2 atau yang lebih baru. Tidak perlu string, tidak perlu java.sql.*kelas.

Di mana mendapatkan kelas java.time?

Proyek ThreeTen-Extra memperluas java.time dengan kelas tambahan. Proyek ini adalah tempat pembuktian untuk kemungkinan penambahan java.time di masa mendatang. Anda mungkin menemukan beberapa kelas berguna di sini seperti Interval, YearWeek, YearQuarter, dan lebih .


9

Lebih cepat:

String date = FastDateFormat.getInstance("dd-MM-yyyy").format(System.currentTimeMillis( ));

4
Membutuhkan org.apache.commons
Josiah Yoder

1

Untuk waktu sebagai YYYY-MM-dd

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

Dan Library of DateTime adalah:

import org.joda.time.DateTime;


Dan dari perpustakaan apa DateTime? Jawaban tentang Stack Overflow harus memiliki penjelasan karena situs ini dimaksudkan sebagai lebih dari sekadar pustaka cuplikan.
Basil Bourque

0

Sebagian besar jawaban valid. Modifikasi JAVA API baru untuk penanganan Tanggal memastikan bahwa beberapa ambiguitas sebelumnya dalam penanganan tanggal java dikurangi.

Anda akan mendapatkan pesan yang tidak berlaku lagi untuk panggilan serupa.

new Date() // deprecated

Panggilan di atas membuat pengembang berasumsi bahwa objek Tanggal baru akan memberikan objek Tanggal dengan stempel waktu saat ini. Perilaku ini tidak konsisten di seluruh kelas API Java lainnya.

Cara baru untuk melakukannya adalah menggunakan Contoh Kalender .

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

Di sini juga konvensi penamaan tidak sempurna tetapi ini banyak diatur. Untuk orang seperti saya yang kesulitan menjambret sesuatu tetapi tidak akan pernah melupakan sesuatu jika kedengarannya / tampak logis, ini adalah pendekatan yang baik.

Ini lebih identik dengan kehidupan nyata

  1. Kami mendapatkan objek Kalender dan kami mencari waktu di dalamnya. (Anda pasti bertanya-tanya tidak ada orang yang mendapat waktu dari Kalender, itulah mengapa saya mengatakan itu tidak sempurna, tetapi itu adalah topik yang berbeda sama sekali)
  2. Kemudian kami menginginkan tanggal dalam format Teks sederhana sehingga kami menggunakan kelas utilitas SimpleDateFormat yang membantu kami dalam memformat Tanggal dari Langkah 1. Saya telah menggunakan yyyy, MM, dd sebagai parameter dalam format. Parameter format tanggal yang didukung

Satu cara lagi untuk melakukannya adalah dengan menggunakan Joda time API

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

atau yang lebih jelas

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

keduanya akan mengembalikan hasil yang sama.


FYI, merepotkan tua kelas tanggal-waktu seperti java.util.Date, java.util.Calendar, dan java.text.SimpleTextFormatsekarang warisan , digantikan oleh java.time kelas. Selain itu, proyek Joda-Time sekarang dalam mode pemeliharaan , dengan tim menyarankan migrasi ke java.time.
Basil Bourque

1
@BasilBourque Itulah yang saya maksud dalam jawaban saya, bahwa jawaban pilihan teratas benar tetapi tidak relevan dengan pengembang saat ini. Akhirnya java akan memiliki kelas Jam dan Clock.getTime () akan jauh lebih masuk akal dan meniru kehidupan nyata daripada kelas Date atau DateTime atau Time. Pengembang Java perlu tahu bahwa OOPS dimulai sebagai sesuatu yang meniru skenario kehidupan nyata.
Swapnil Vargaonkar

FYI, Clockimplementasinya di Java 8 persis sama dengan class lama. Hanya di Java 9 implementasi baru tiba, mampu menangkap momen saat ini dengan resolusi sehalus nanodetik.
Basil Bourque

Ya, itulah alasan saya menulis "akhirnya" Java akan memiliki kelas Jam yang akan meniru skenario kehidupan nyata (konsep OOPS) dan menunjukkan / menangkap (cara Anda lebih suka mengatakannya) momen saat ini.
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
Beberapa penjelasan tentang potongan kode ini mungkin akan bermanfaat.
Pyves

1
Jawabannya tidak relevan dengan pertanyaan tersebut. Dan Tidak, Anda tidak dapat meneruskan tanggal dalam Stringformat apa pun ke fungsi Anda.
Jerin Joseph
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.