Kalender tanggal ke format yyyy-MM-dd di java

210

Bagaimana mengkonversi tanggal kalender ke yyyy-MM-ddformat.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
String date1 = format1.format(date);            
Date inActiveDate = null;
try {
    inActiveDate = format1.parse(date1);
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

Ini akan menghasilkan inActiveDate = Wed Sep 26 00:00:00 IST 2012. Tapi yang saya butuhkan adalah 2012-09-26. Tujuan saya adalah membandingkan tanggal ini dengan tanggal lain di basis data saya menggunakan kriteria Hibernate. Jadi saya perlu objek tanggal dalam yyyy-MM-ddformat.

Sarika.S
sumber
5
Kode Anda membingungkan. Apakah Anda mencoba memformat Dateke yyyy-MM-ddatau mem-parsing String dari yyyy-MM-ddke suatu Datenilai ?? Untuk memformat tanggal, cukup gunakan format1.format(date), untuk menguraikannya, gunakanformat1.parse(someStringValueInTheCorrectFormat)
MadProgrammer
Saya telah mengedit pertanyaan saya .. Maaf atas kesalahan sebelumnya ..
Sarika.S
9
satu liner:( new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSXXX" ) ).format( Calendar.getInstance().getTime() );
Iwan Aucamp

Jawaban:

342

Java Dateadalah wadah untuk jumlah milidetik sejak 1 Januari 1970, 00:00:00 GMT.

Saat Anda menggunakan sesuatu seperti System.out.println(date), Java menggunakan Date.toString()untuk mencetak konten.

Satu-satunya cara untuk mengubahnya adalah mengganti Datedan menyediakan implementasi Anda sendiri untuk Date.toString(). Sekarang sebelum Anda menjalankan IDE Anda dan coba ini, saya tidak akan; itu hanya akan memperumit masalah. Sebaiknya Anda memformat tanggal ke format yang ingin Anda gunakan (atau tampilkan).

Java 8+

LocalDateTime ldt = LocalDateTime.now().plusDays(1);
DateTimeFormatter formmat1 = DateTimeFormatter.ofPattern("yyyy-MM-dd", Locale.ENGLISH);
System.out.println(ldt);
// Output "2018-05-12T17:21:53.658"

String formatter = formmat1.format(ldt);
System.out.println(formatter);
// 2018-05-12

Sebelum ke Jawa 8

Anda harus menggunakan Backport ThreeTen

Berikut ini dipertahankan untuk tujuan historis (sebagai jawaban asli)

Yang bisa Anda lakukan adalah memformat tanggal.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(cal.getTime());
// Output "Wed Sep 26 14:23:28 EST 2012"

String formatted = format1.format(cal.getTime());
System.out.println(formatted);
// Output "2012-09-26"

System.out.println(format1.parse(formatted));
// Output "Wed Sep 26 00:00:00 EST 2012"

Ini sebenarnya tanggal yang sama, diwakili secara berbeda.

Program Mad
sumber
1
Agak, tapi itu jauh lebih mudah denganCalendar
MadProgrammer
1
Pokoknya untuk menghapus zona waktu sepenuhnya dari dari objek kalender ini?
Sarika.S
2
Jika Anda benar-benar serius tentang manipulasi tanggal / waktu, lihat Joda Time , ini jauh lebih mudah daripada bermain-mainCalendar
MadProgrammer
2
@ n13 jika pertanyaannya adalah tentang manipulasi tanggal database atau bahkan manipulasi waktu saya mungkin setuju dengan Anda. Pertanyaannya adalah bagaimana merepresentasikan nilai tanggal dalam format tanggal tertentu
MadProgrammer
1
Jawaban terstruktur dengan baik - ini pada dasarnya Model (Tanggal) -Perlihat (Format) pemisahan.
YoYo
19

Kode Anda salah. Tidak ada gunanya menguraikan tanggal dan menyimpannya sebagai objek Date.

Anda dapat memformat objek tanggal kalender saat Anda ingin menampilkan dan menyimpannya sebagai string.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();             
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");          
String inActiveDate = null;
try {
    inActiveDate = format1.format(date);
    System.out.println(inActiveDate );
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}
Niroshan Abayakoon
sumber
13

waktu java

The jawaban dengan MadProgrammer benar, terutama tip tentang Joda-Time . Pengganti Joda-Time sekarang dibangun ke Java 8 sebagai paket java.time baru . Berikut contoh kode di Java 8.

Saat bekerja dengan tanggal-waktu (sebagai lawan dari tanggal lokal), zona waktu kritis. Hari-bulan tergantung pada zona waktu. Sebagai contoh, zona waktu India adalah +05:30(lima setengah jam lebih awal dari UTC), sementara Perancis hanya satu jam di depan. Jadi suatu saat di hari baru di India memiliki satu kencan sedangkan saat yang sama di Perancis memiliki tanggal "kemarin". Membuat keluaran string yang tidak memiliki zona waktu atau informasi offset akan menciptakan ambiguitas. Anda meminta output YYYY-MM-DD jadi saya berikan, tapi saya tidak merekomendasikannya. Alih-alih ISO_LOCAL_DATEsaya akan digunakan ISO_DATEuntuk mendapatkan output ini:2014-02-25+05:30

ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zonedDateTime = ZonedDateTime.now( zoneId );

DateTimeFormatter formatterOutput = DateTimeFormatter.ISO_LOCAL_DATE; // Caution: The "LOCAL" part means we are losing time zone information, creating ambiguity.
String output = formatterOutput.format( zonedDateTime );

Dump untuk menghibur ...

System.out.println( "zonedDateTime: " + zonedDateTime );
System.out.println( "output: " + output );

Saat dijalankan ...

zonedDateTime: 2014-02-25T14:22:20.919+05:30[Asia/Kolkata]
output: 2014-02-25

Joda-Time

Kode serupa menggunakan perpustakaan Joda-Time , pendahulu untuk java.time.

DateTimeZone zone = new DateTimeZone( "Asia/Kolkata" );
DateTime dateTime = DateTime.now( zone );
DateTimeFormatter formatter = ISODateTimeFormat.date();
String output = formatter.print( dateTime );

ISO 8601

Omong-omong, format string input Anda adalah format standar, salah satu dari beberapa format string tanggal-waktu yang praktis yang ditentukan oleh ISO 8601 .

Baik Joda-Time dan java.time menggunakan format ISO 8601 secara default saat mem-parsing dan membuat representasi string dari berbagai nilai tanggal-waktu.

Basil Bourque
sumber
6

java.util.Dateobjek tidak dapat mewakili tanggal dalam format khusus sebagai gantinya Anda harus menggunakan SimpleDateFormat.formatmetode yang mengembalikan string.

String myString=format1.format(date);
adatapost
sumber
2

Untuk mengurai java.util.Dateobjek, Anda harus mengonversinya menjadi String terlebih dahulu menggunakan format Anda sendiri.

inActiveDate = format1.parse(  format1.format(date)  );

Tapi saya yakin Anda berlebihan di sini.

Penatua Michael
sumber
2
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 7);
Date date = c.getTime();
SimpleDateFormat ft = new SimpleDateFormat("MM-dd-YYYY");
JOptionPane.showMessageDialog(null, ft.format(date));

Ini akan menampilkan tanggal Anda + 7 hari dalam format bulan, hari dan tahun di panel jendela JOption.

Drew
sumber
2
public static void main(String[] args) {
    Calendar cal = Calendar.getInstance();
    cal.set(year, month, date);
    SimpleDateFormat format1 = new SimpleDateFormat("yyyy MM dd");
    String formatted = format1.format(cal.getTime());
    System.out.println(formatted);
}
Petr
sumber
2
Selamat datang di SO. Harap tambahkan beberapa konteks / penjelasan, karena hanya kode jawaban yang tidak memenuhi standar kami. Lihat stackoverflow.com/help/how-to-answer
Uwe Allner
0

Saya menemukan kode ini di mana tanggal dibandingkan dalam format untuk dibandingkan dengan bidang tanggal di basis data ... mungkin ini mungkin bermanfaat bagi Anda ...

Saat Anda mengonversi string menjadi tanggal menggunakan format simpledate, sulit untuk membandingkan dengan bidang Tanggal di database mysql.

Jadi konversi tanggal string java dalam format menggunakan pilih STR_to_DATE ('tanggal Anda', '% m /% d /% Y') -> dalam format ini, maka Anda akan mendapatkan format tanggal yang tepat dari bidang tanggal mysql.

http://javainfinite.com/java/java-convert-string-to-date-and-compare/

JavaLearner
sumber
3
Jawaban hanya tautan tidak disarankan di StackOverflow karena tautan busuk dan masalah lainnya. Bisakah Anda memberikan ringkasan informasi dengan poin-poin utama?
Basil Bourque
0
public static String ThisWeekStartDate(WebDriver driver) {
        Calendar c = Calendar.getInstance();
        //ensure the method works within current month
        c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        System.out.println("Before Start Date " + c.getTime());
        Date date = c.getTime();

          SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");

          String CurrentDate = dfDate.format(date);
          System.out.println("Start Date " + CurrentDate);
          return CurrentDate;

    }
    public static String ThisWeekEndDate(WebDriver driver) {

        Calendar c = Calendar.getInstance();
        //ensure the method works within current month
        c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
        System.out.println("Before End Date " + c.getTime());
        Date date = c.getTime();

          SimpleDateFormat dfDate = new SimpleDateFormat("dd MMM yyyy hh.mm a");

          String CurrentDate = dfDate.format(date);
          System.out.println("End Date " + CurrentDate);
          return CurrentDate;
    }
Unnati Solanki
sumber