Saya ingin mengonversi String
ke Date
dalam format yang berbeda.
Sebagai contoh,
Saya mendapatkan dari pengguna,
String fromDate = "19/05/2009"; // i.e. (dd/MM/yyyy) format
Saya ingin mengonversinya fromDate
sebagai "yyyy-MM-dd"
format objek Tanggal
Bagaimana saya bisa melakukan ini?
Jawaban:
Coba lihat
SimpleDateFormat
. Kode berjalan seperti ini:SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy"); SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd"); try { String reformattedStr = myFormat.format(fromUser.parse(inputString)); } catch (ParseException e) { e.printStackTrace(); }
sumber
Date
format?parse
dan jangan lanjutkanformat
.parse
mem-parsing String menjadi Date.parse
berikan sayadate format
sebagaimanaFri Jan 06 00:01:00 EST 2012
yang diperlukan dalam2012-01-06
format tanggalSystem.out.println(anyDateObject)
metode toString () default yang disebut akan mencetak dalam format itu misalnyaFri Jan 06 00:01:00 EST 2012
. Anda perlu menggantinya agar sesuai dengan kebutuhan Anda.java.util.Date
,java.util.Calendar
, danjava.text.SimpleDateFormat
sekarang warisan , digantikan oleh java.time kelas dibangun ke Jawa 8 & Java 9. Lihat Tutorial oleh Oracle .tl; dr
LocalDate.parse( "19/05/2009" , DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) )
Detail
Jawaban lain dengan
java.util.Date
,java.sql.Date
, danSimpleDateFormat
sekarang ketinggalan jaman.LocalDate
Cara modern untuk melakukan tanggal-waktu adalah bekerja dengan kelas java.time, khususnya
LocalDate
. TheLocalDate
kelas mewakili nilai tanggal-hanya tanpa waktu-of-hari dan tanpa zona waktu.DateTimeFormatter
Untuk mengurai, atau menghasilkan, String yang mewakili nilai tanggal-waktu, gunakan
DateTimeFormatter
kelas.DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ); LocalDate ld = LocalDate.parse( "19/05/2009" , f );
Jangan menggabungkan objek tanggal-waktu dengan String yang mewakili nilainya. Objek tanggal-waktu tidak memiliki format , sedangkan String tidak. Objek tanggal-waktu, seperti
LocalDate
, dapat menghasilkan String untuk mewakili nilai internalnya, tetapi objek tanggal-waktu dan String adalah objek terpisah yang terpisah.Anda dapat menentukan format kustom apa pun untuk menghasilkan String. Atau biarkan java.time melakukan pelokalan otomatis.
Buang ke konsol.
System.out.println( "ld: " + ld + " | output: " + output );
Lihat aksinya di IdeOne.com .
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.Dimana 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 .sumber
Gunakan
SimpleDateFormat
kelas:private Date parseDate(String date, String format) throws ParseException { SimpleDateFormat formatter = new SimpleDateFormat(format); return formatter.parse(date); }
Pemakaian:
Date date = parseDate("19/05/2009", "dd/MM/yyyy");
Untuk efisiensi, Anda ingin menyimpan pemformat Anda dalam sebuah peta hash. Hashmap adalah anggota statis kelas util Anda.
private static Map<String, SimpleDateFormat> hashFormatters = new HashMap<String, SimpleDateFormat>(); public static Date parseDate(String date, String format) throws ParseException { SimpleDateFormat formatter = hashFormatters.get(format); if (formatter == null) { formatter = new SimpleDateFormat(format); hashFormatters.put(format, formatter); } return formatter.parse(date); }
sumber
Ubah tanggal string menjadi java.sql.Date
String fromDate = "19/05/2009"; DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); java.util.Date dtt = df.parse(fromDate); java.sql.Date ds = new java.sql.Date(dtt.getTime()); System.out.println(ds);//Mon Jul 05 00:00:00 IST 2010
sumber
Periksa javadocs untuk
java.text.SimpleDateFormat
menjelaskan semua yang Anda butuhkan.sumber
Meskipun
SimpleDateFormat
memang akan berfungsi untuk kebutuhan Anda, selain itu Anda mungkin ingin memeriksa Joda Time , yang tampaknya merupakan dasar untuk perpustakaan Tanggal ulang di Java 7. Meskipun saya belum sering menggunakannya, saya tidak mendengar apa pun selain hal-hal yang baik tentang hal itu dan jika Anda memanipulasi tanggal secara ekstensif dalam proyek Anda, itu mungkin layak untuk dilihat.sumber
Misalkan Anda memiliki string seperti ini:
String mDate="2019-09-17T10:56:07.827088"
Sekarang kami ingin mengubah
String
format ini memisahkan tanggal dan waktu di Java dan Kotlin .JAWA:
kami memiliki metode untuk tanggal ekstrak :
public String getDate() { try { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US); Date date = dateFormat.parse(mDate); dateFormat = new SimpleDateFormat("MM/dd/yyyy", Locale.US); return dateFormat.format(date); } catch (ParseException e) { e.printStackTrace(); } return null; }
Return
apakah ini: 09/17/2019Dan kami memiliki metode untuk waktu ekstrak :
public String getTime() { try { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US); Date date = dateFormat.parse(mCreatedAt); dateFormat = new SimpleDateFormat("h:mm a", Locale.US); return dateFormat.format(date); } catch (ParseException e) { e.printStackTrace(); } return null; }
Return
Apakah ini: 10:56 AMKOTLIN:
kami memiliki fungsi untuk mengekstrak tanggal :
fun getDate(): String? { var dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US) val date = dateFormat.parse(mDate!!) dateFormat = SimpleDateFormat("MM/dd/yyyy", Locale.US) return dateFormat.format(date!!) }
Return
apakah ini: 09/17/2019Dan kami memiliki metode untuk waktu ekstrak :
fun getTime(): String { var dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.US) val time = dateFormat.parse(mDate!!) dateFormat = SimpleDateFormat("h:mm a", Locale.US) return dateFormat.format(time!!) }
Return
Apakah ini: 10:56 AMsumber
SimpleDateFormat
. Setidaknya bukan sebagai opsi pertama. Dan bukan tanpa syarat apapun. Hari ini kami memiliki jauh lebih baikjava.time
, API tanggal dan waktu Java modern, danDateTimeFormatter
. JugaSimpleDateFormat
tidak dapat mengurai 6 desimal pada detik (mikrodetik) dengan benar.10:56 AM
seperti yang Anda katakan, tetapi sebaliknya11:09 AM
(diuji pada Oracle jdk-11.0.3).DateTimeFormatter
kita perluminsdk 26
atau lebih tinggi maka itu tidak baik10:56 AM
Cara sederhana untuk memformat tanggal dan mengubahnya menjadi string
Date date= new Date(); String dateStr=String.format("%td/%tm/%tY", date,date,date); System.out.println("Date with format of dd/mm/dd: "+dateStr);
sumber
Sebuah
Date
objek memiliki tidak ada format , itu adalah representasi. Tanggal dapat disajikanString
dengan format yang Anda suka .Misalnya "
yyyy-MM-dd
", "yy-MMM-dd
", "dd-MMM-yy
" dan lain-lain.Untuk mencapai ini, Anda bisa menggunakan file
SimpleDateFormat
Coba ini,
String inputString = "19/05/2009"; // i.e. (dd/MM/yyyy) format SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy"); SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Date dateFromUser = fromUser.parse(inputString); // Parse it to the exisitng date pattern and return Date type String dateMyFormat = myFormat.format(dateFromUser); // format it to the date pattern you prefer System.out.println(dateMyFormat); // outputs : 2009-05-19 } catch (ParseException e) { e.printStackTrace(); }
Output ini: 2009-05-19
sumber