Chcę przekonwertować Stringna Dateróżne formaty.
Na przykład,
Otrzymuję od użytkownika,
String fromDate = "19/05/2009"; // i.e. (dd/MM/yyyy) format
Chcę przekonwertować to fromDatejako obiekt "yyyy-MM-dd"formatu Date
Jak mogę to zrobić?
Chcę przekonwertować Stringna Dateróżne formaty.
Na przykład,
Otrzymuję od użytkownika,
String fromDate = "19/05/2009"; // i.e. (dd/MM/yyyy) format
Chcę przekonwertować to fromDatejako 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();
}
Dateformacie?
parsei nie idź dalej format. parseanalizuje String do Date.
parsedaje mi date formatjak Fri Jan 06 00:01:00 EST 2012, ale trzeba w 2012-01-06formacie daty
System.out.println(anyDateObject)domyślnej metody toString () jest wywoływana metoda, o której powiedziano, że drukuje w tym formacie, np Fri Jan 06 00:01:00 EST 2012. Musisz go zmienić, aby odpowiadał Twoim potrzebom.
java.util.Date, java.util.Calendari java.text.SimpleDateFormatsą teraz starsze , zastąpione przez klasy java.time wbudowane w Java 8 i Java 9. Zobacz samouczek Oracle .
LocalDate.parse(
"19/05/2009" ,
DateTimeFormatter.ofPattern( "dd/MM/uuuu" )
)
Pozostałe odpowiedzi z java.util.Date, java.sql.Datei SimpleDateFormatsą obecnie nieaktualne.
LocalDateWspółczesnym sposobem określania daty i godziny jest praca z klasami java.time LocalDate. LocalDateKlasa reprezentuje wartość data-tylko bez time-of-day i bez strefy czasowej.
DateTimeFormatterAby przeanalizować lub wygenerować String reprezentujący wartość daty i godziny, użyj DateTimeFormatterklasy.
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ę.
DateTimeFormatter f =
DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH ) ;
String output = ld.format( f );
Zrzuć na konsolę.
System.out.println( "ld: " + ld + " | output: " + output );
ld: 2009-05-19 | wyjście: mardi 19 maja 2009
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, i SimpleDateFormat.
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 .
Skorzystaj z SimpleDateFormatzajęć:
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);
}
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
Sprawdź javadocs. java.text.SimpleDateFormatOpisuje wszystko, czego potrzebujesz.
Chociaż SimpleDateFormatrzeczywiś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ć.
Załóżmy, że masz taki ciąg:
String mDate="2019-09-17T10:56:07.827088"
Teraz chcemy zmienić ten Stringformat 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.2019
Mamy 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;
}
Returnjest to: 10:56
KOTLIN:
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.2019
Mamy 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!!)
}
Returnjest to: 10:56
SimpleDateFormatklasy. Przynajmniej nie jako pierwsza opcja. I nie bez zastrzeżeń. Dziś mamy o wiele lepsze java.time, nowoczesne API daty i czasu w Javie i jego DateTimeFormatter. Nie SimpleDateFormatmożna również poprawnie przeanalizować 6 miejsc po przecinku w sekundach (mikrosekundach).
10:56 AMco powiedziałeś, że powinienem, ale zamiast tego 11:09 AM(testowane na Oracle jdk-11.0.3).
DateTimeFormatterpotrzebujemy minsdk 26lub wyżej, to nie jest to dobre
10: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);
wyjście: Data w formacie dd / mm / dd: 21/10/2015
DateObiekt ma żadnego wzoru , to jest reprezentacja. Datę można przedstawić Stringw 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