I'm mencoba untuk format tanggal yyyy-MM-dd'T'HH:mm:ss.SSSz format yyyy-mm-dd HH:mm:ss, yang harus mudah tapi aku bisa't mendapatkan itu untuk bekerja.
Tanggal yang harus diurai dalam bentuk: 2012-10-01T09:45:00.000+02:00
Sekarang saya menggunakan sederhana ini tanggal formatter untuk format:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSz", Locale.FRANCE);
namun hal ini memberikan output yang sama untuk 2012-10-01T09:45:00.000 UTC+00:00.
I've juga mencoba untuk menggunakan "yyyy-MM-dd'T'HH:mm:ss.SSSZ" sebagai pola dan "yyyy-MM-ddHH:mm:ss". Yang terakhir kembali tanggal dalam bentuk 2012-10-01T09:45:00 dekat, tapi belum ada di sana.
Saya pikir substringing T jauh akan menjadi sedikit berantakan dan menciptakan overhead tanpa alasan, dengan demikian apa yang akan menjadi cara yang tepat untuk format tanggal ini?
Untuk menggambarkan saya ingin mengkonversi 2012-10-01T09:45:00.000+02:00 ke 2012-10-01 09:45:00
Cheers!
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
SimpleDateFormat output = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse(time);
String formattedTime = output.format(d);
Ini bekerja. Anda harus menggunakan dua SimpleDateFormats, satu untuk input dan satu output, tapi itu akan memberi anda apa yang anda ingin.
Kami memiliki teknologi baru untuk masalah ini: java.waktu framework yang dibangun ke Jawa 8 dan kemudian.
Anda input string dalam standar ISO 8601 format. Standar yang digunakan secara default di jawa.waktu kelas untuk parsing/menghasilkan representasi tekstual dari tanggal-waktu nilai-nilai.
OffsetDateTime odt = OffsetDateTime.parse( "2012-10-01T09:45:00.000+02:00" );
Pertanyaan anda menunjukkan anda ingin memotong ke seluruh kedua.
OffsetDateTime odtTruncatedToWholeSecond = odt.truncatedTo( ChronoUnit.SECONDS );
Tampaknya anda ingin menghilangkan offset dan zona waktu informasi. Pra-didefinisikan formatter DateTimeFormatter.ISO_LOCAL_DATE_TIME
apa itu.
Dan tampaknya anda ingin menggunakan ruang di tengah daripada standar T
. Anda bisa menentukan sendiri formatter untuk ini, tapi saya hanya akan melakukan manipulasi string untuk menggantikan T
dengan RUANG.
String output = odtTruncatedToWholeSecond.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ).replace( "T" , " " );
Sebagai komentar pada Pertanyaan menyarankan, sebenarnya anda dapat mencapai tujuan anda dengan kerja hanya dengan string dan konversi untuk setiap tanggal-waktu benda-benda. Tapi saya memberikan Jawaban ini di sini dengan asumsi anda mungkin memiliki logika bisnis lain untuk bekerja dengan orang-tanggal-waktu nilai-nilai.
The jawa.waktu kerangka dibangun ke Jawa 8 dan kemudian. Kelas-kelas ini menggantikan merepotkan tua legacy tanggal waktu kelas seperti jawa.util.Tanggal
, Kalender
, & SimpleDateFormat
.
The Joda-Waktu proyek, sekarang di maintenance mode, menyarankan migrasi ke jawa.waktu kelas.
Untuk mempelajari lebih lanjut, lihat Oracle Tutorial. Dan pencarian Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasi JSR 310.
Anda dapat bertukar jawa.waktu benda-benda secara langsung dengan database anda. Gunakan JDBC driver sesuai dengan JDBC 4.2 atau yang lebih baru. Tidak perlu untuk string, tidak perlu untuk jawa.sql.*
kelas-kelas.
Di mana untuk memperoleh jawa.waktu kelas?
The ThreeTen-Tambahan proyek meluas jawa.waktu dengan kelas tambahan. Proyek ini adalah ajang pembuktian bagi masa depan mungkin penambahan jawa.waktu. Anda mungkin menemukan beberapa kelas yang berguna di sini seperti Interval
, YearWeek
, YearQuarter
, dan lebih.
Gooye jika itu's mungkin untuk menggunakan Joda Time di proyek anda maka kode ini bekerja untuk saya:
String dateStr = "2012-10-01T09:45:00.000+02:00";
String customFormat = "yyyy-MM-dd HH:mm:ss";
DateTimeFormatter dtf = ISODateTimeFormat.dateTime();
LocalDateTime parsedDate = dtf.parseLocalDateTime(dateStr);
String dateWithCustomFormat = parsedDate.toString(DateTimeFormat.forPattern(customFormat));
System.out.println(dateWithCustomFormat);
Saya mencoba untuk format tanggal string yang diterima dari respon JSON misalnya 2016-03-09T04:50:00-0800 untuk yyyy-MM-dd. Jadi di sini's apa yang saya mencoba dan bekerja dan membantu saya menetapkan tanggal diformat string widget kalender.
String DATE_FORMAT_I = "yyyy-MM-dd'T'HH:mm:ss";
String DATE_FORMAT_O = "yyyy-MM-dd";
SimpleDateFormat formatInput = new SimpleDateFormat(DATE_FORMAT_I);
SimpleDateFormat formatOutput = new SimpleDateFormat(DATE_FORMAT_O);
Date date = formatInput.parse(member.getString("date"));
String dateString = formatOutput.format(date);
Ini bekerja. Terima kasih.
String dateStr = "2016-09-17T08:14:03+00:00";
String s = dateStr.replace("Z", "+00:00");
s = s.substring(0, 22) + s.substring(23);
Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse(s);
Timestamp createdOn = new Timestamp(date.getTime());
mcList.setCreated_on(createdOn);
Jawa 7 ditambahkan dukungan untuk zona waktu deskriptor sesuai dengan ISO 8601. Hal ini dapat digunakan dalam Java 7.