Chcę przekonwertować String
na Date
różne formaty.
Na przykład,
Otrzymuję od użytkownika,
String fromDate = "19/05/2009"; // i.e. (dd/MM/yyyy) format
Chcę przekonwertować to fromDate
jako obiekt "yyyy-MM-dd"
formatu Date
Jak mogę to zrobić?
Odpowiedzi:
Spójrz na
SimpleDateFormat
. Kod wygląda mniej więcej tak: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(); }
źródło
Date
formacie?parse
i nie idź dalejformat
.parse
analizuje String do Date.parse
daje midate format
jakFri Jan 06 00:01:00 EST 2012
, ale trzeba w2012-01-06
formacie datySystem.out.println(anyDateObject)
domyślnej metody toString () jest wywoływana metoda, o której powiedziano, że drukuje w tym formacie, npFri Jan 06 00:01:00 EST 2012
. Musisz go zmienić, aby odpowiadał Twoim potrzebom.java.util.Date
,java.util.Calendar
ijava.text.SimpleDateFormat
są teraz starsze , zastąpione przez klasy java.time wbudowane w Java 8 i Java 9. Zobacz samouczek Oracle .tl; dr
LocalDate.parse( "19/05/2009" , DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) )
Detale
Pozostałe odpowiedzi z
java.util.Date
,java.sql.Date
iSimpleDateFormat
są obecnie nieaktualne.LocalDate
Współczesnym sposobem określania daty i godziny jest praca z klasami java.time
LocalDate
.LocalDate
Klasa reprezentuje wartość data-tylko bez time-of-day i bez strefy czasowej.DateTimeFormatter
Aby przeanalizować lub wygenerować String reprezentujący wartość daty i godziny, użyj
DateTimeFormatter
klasy.DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ); LocalDate ld = LocalDate.parse( "19/05/2009" , f );
Nie łącz obiektu daty i godziny z ciągiem znaków reprezentującym jego wartość. Obiekt daty i godziny nie ma formatu , podczas gdy String ma. Obiekt daty i godziny, taki jak
LocalDate
, może generować String w celu reprezentowania jego wartości wewnętrznej, ale obiekt daty i godziny i String są oddzielnymi odrębnymi obiektami.Możesz określić dowolny format niestandardowy, aby wygenerować ciąg. Lub pozwól java.time wykonać automatyczną lokalizację.
Zrzuć na konsolę.
System.out.println( "ld: " + ld + " | output: " + output );
Zobacz w akcji w IdeOne.com .
Informacje o java.time
Struktura java.time jest wbudowana w Javę 8 i nowsze. Klasy te kłopotliwe zastąpić stary starszych klas Date-Time, takich jak
java.util.Date
,Calendar
, iSimpleDateFormat
.Projekt Joda-Time , obecnie w trybie konserwacji , zaleca migrację do klas java.time .
Aby dowiedzieć się więcej, zobacz samouczek Oracle . I przeszukaj Stack Overflow, aby znaleźć wiele przykładów i wyjaśnień. Specyfikacja to JSR 310 .
Możesz wymieniać obiekty java.time bezpośrednio ze swoją bazą danych. Użyj sterownika JDBC zgodnego z JDBC 4.2 lub nowszym. Nie ma potrzeby stosowania ciągów ani
java.sql.*
klas.Skąd wziąć klasy java.time?
Projekt ThreeTen-Extra rozszerza java.time o dodatkowe klasy. Ten projekt jest poligonem doświadczalnym dla ewentualnych przyszłych dodatków do java.time. Można znaleźć kilka przydatnych klas tutaj takie jak
Interval
,YearWeek
,YearQuarter
, i więcej .źródło
Skorzystaj z
SimpleDateFormat
zajęć:private Date parseDate(String date, String format) throws ParseException { SimpleDateFormat formatter = new SimpleDateFormat(format); return formatter.parse(date); }
Stosowanie:
Date date = parseDate("19/05/2009", "dd/MM/yyyy");
Aby zwiększyć wydajność, chciałbyś przechowywać swoje elementy formatujące w skrócie. Hashmap to statyczny element członkowski Twojej klasy util.
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); }
źródło
Przekonwertuj datę w postaci łańcucha na 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
źródło
Sprawdź javadocs.
java.text.SimpleDateFormat
Opisuje wszystko, czego potrzebujesz.źródło
Chociaż
SimpleDateFormat
rzeczywiście będzie działać dla twoich potrzeb, dodatkowo możesz chcieć sprawdzić Joda Time , który jest najwyraźniej podstawą przerobionej biblioteki Date w Javie 7. Chociaż nie używałem go zbyt często, nie słyszałem nic poza dobrymi rzeczami o tym i jeśli manipulujesz datami w swoich projektach, prawdopodobnie warto byłoby się temu przyjrzeć.źródło
Załóżmy, że masz taki ciąg:
String mDate="2019-09-17T10:56:07.827088"
Teraz chcemy zmienić ten
String
format oddzielnie dla daty i czasu w Javie i Kotlinie .JAWA:
mamy metodę na wyodrębnienie daty :
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
jest to: 17.09.2019Mamy metodę na czas ekstrakcji :
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
jest to: 10:56KOTLIN:
mamy funkcję wyodrębniania daty :
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
jest to: 17.09.2019Mamy metodę na czas ekstrakcji :
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
jest to: 10:56źródło
SimpleDateFormat
klasy. Przynajmniej nie jako pierwsza opcja. I nie bez zastrzeżeń. Dziś mamy o wiele lepszejava.time
, nowoczesne API daty i czasu w Javie i jegoDateTimeFormatter
. NieSimpleDateFormat
można również poprawnie przeanalizować 6 miejsc po przecinku w sekundach (mikrosekundach).10:56 AM
co powiedziałeś, że powinienem, ale zamiast tego11:09 AM
(testowane na Oracle jdk-11.0.3).DateTimeFormatter
potrzebujemyminsdk 26
lub wyżej, to nie jest to dobre10:56 AM
Prosty sposób na sformatowanie daty i przekształcenie w ciąg
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);
źródło
Date
Obiekt ma żadnego wzoru , to jest reprezentacja. Datę można przedstawićString
w formacie, który lubisz .Np. „
yyyy-MM-dd
”, „yy-MMM-dd
”, „dd-MMM-yy
” Itp.Aby to osiągnąć, możesz skorzystać z
SimpleDateFormat
Spróbuj tego,
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(); }
To daje: 2009-05-19
źródło