Jak przekonwertować ciąg znaków na datę za pomocą SimpleDateFormat?
Mam ten fragment kodu:
DateFormat formatter1;
formatter1 = new SimpleDateFormat("mm/DD/yyyy");
System.out.println((Date)formatter1.parse("08/16/2011"));
Kiedy uruchamiam to, dostaję to jako wyjście:
Sun Jan 16 00:10:00 IST 2011
Spodziewałem się:
Tue Aug 16 "Whatever Time" IST 2011
To znaczy, że nie dostanę miesiąca zgodnie z oczekiwaniami. Jaki jest błąd? 10 answers
Spróbuj tego:
new SimpleDateFormat("MM/dd/yyyy")
-
MM
to "miesiąc" (niemm
) -
dd
to "dzień" (nieDD
)
To wszystko w javadoc dla SimpleDateFormat
dla twojej wiadomości, powodem, dla którego twój format jest nadal prawidłowym formatem daty, Jest to, że:
-
mm
to "minuty" -
DD
to "dzień w roku"
Poza tym, nie potrzebujesz obsady do Date
... it already is a Date
(or it "eksploduje"): {]}
public static void main(String[] args) throws ParseException {
System.out.println(new SimpleDateFormat("MM/dd/yyyy").parse("08/16/2011"));
}
Wyjście:
Tue Aug 16 00:00:00 EST 2011
Voila!Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-26 12:55:34
M - min M-miesiące
Letter Date or Time Component Presentation Examples
G Era designator Text AD
y Year Year 1996; 96
M Month in year Month July; Jul; 07
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
d Day in month Number 10
F Day of week in month Number 2
E Day in week Text Tuesday; Tue
a Am/pm marker Text PM
H Hour in day (0-23) Number 0
k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
m Minute in hour Number 30
s Second in minute Number 55
S Millisecond Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-03 10:46:35
Użyj poniższej funkcji
/**
* Format a time from a given format to given target format
*
* @param inputFormat
* @param inputTimeStamp
* @param outputFormat
* @return
* @throws ParseException
*/
private static String TimeStampConverter(final String inputFormat,
String inputTimeStamp, final String outputFormat)
throws ParseException {
return new SimpleDateFormat(outputFormat).format(new SimpleDateFormat(
inputFormat).parse(inputTimeStamp));
}
Przykładowe użycie jest następujące:
try {
String inputTimeStamp = "08/16/2011";
final String inputFormat = "MM/dd/yyyy";
final String outputFormat = "EEE MMM dd HH:mm:ss z yyyy";
System.out.println(TimeStampConverter(inputFormat, inputTimeStamp,
outputFormat));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-05 10:18:21
String newstr = "08/16/2011";
SimpleDateFormat format1 = new SimpleDateFormat("MM/dd/yyyy");
SimpleDateFormat format = new SimpleDateFormat("EE MMM dd hh:mm:ss z yyyy");
Calendar c = Calendar.getInstance();
c.setTime(format1.parse(newstr));
System.out.println(format.format(c.getTime()));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-26 13:06:44
Bardzo prostym przykładem jest.
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date date = new Date();
Date date1 = new Date();
try {
System.out.println("Date1: "+date1);
System.out.println("date" + date);
date = simpleDateFormat.parse("01-01-2013");
date1 = simpleDateFormat.parse("06-15-2013");
System.out.println("Date1 is:"+date1);
System.out.println("date" + date);
} catch (Exception e) {
System.out.println(e.getMessage());
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-11 07:27:50
Możesz rozwiązać ten problem bardzo prosto, jak Najpierw przekonwertuj podany łańcuch na obiekt date eg:
java.util.Date date1 = new Date("11/19/2015");
SimpleDateFormat formatter = new SimpleDateFormat("MMM dd yyyy HH:mma");
String format = formatter.format(date);
System.out.println(format);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-19 07:48:18
Ten fragment kodu pomaga konwertować tam iz powrotem
System.out.println("Date: "+ String.valueOf(new Date()));
SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String stringdate = dt.format(new Date());
System.out.println("String.valueOf(date): "+stringdate);
try {
Date date = dt.parse(stringdate);
System.out.println("parse date: "+ String.valueOf(date));
} catch (ParseException e) {
e.printStackTrace();
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-24 07:03:14
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MM/dd/uuuu");
System.out.println(LocalDate.parse("08/16/2011", dateFormatter));
Wyjście:
2011-08-16
Dodaję nowoczesną odpowiedź. odpowiedź Bohemian jest poprawna i była dobrą odpowiedzią, gdy została napisana 6 lat temu. Teraz notorycznie kłopotliwa klasa SimpleDateFormat
jest od dawna przestarzała i mamy o wiele lepsze w java.time
, nowoczesnym Java date and time API. Gorąco polecam używać tego zamiast starych klas daty-czasu.
Kiedy analizuję 08/16/2011
używając Twój fragment, Rozumiem Sun Jan 16 00:08:00 CET 2011
. Ponieważ małe litery {[5] } oznaczają minuty, dostaję 00:08:00
(8 minut po północy), a duże litery {[7] } oznaczają dzień roku, dostaję 16 stycznia.
W java.time
również ciągi wzorców formatu są wrażliwe na wielkość liter i musieliśmy użyć wielkich liter MM
dla miesiąca i małych liter dd dla dnia miesiąca.
Pytanie: Czy Mogę używać Javy.czas z moją wersją Javy?
Tak, java.time
działa ładnie na Javie 6 i Później oraz na starszym i nowszym Androidzie urządzenia.
-
[38]} w Javie 8 i nowszych oraz na nowych urządzeniach z Androidem (od poziomu API 26, Jak mi powiedziano) nowoczesne API jest wbudowane.
- w Javie 6 i 7 uzyskaj Backport ThreeTen, backport nowych klas (ThreeTen dla JSR 310; zobacz linki na dole).
- na (starszym) Androidzie Użyj Android edition Threeten Backport. Nazywa się ThreeTenABP. I upewnij się, że zaimportujesz klasy daty i czasu z
org.threeten.bp
z podpakiety.
Linki
-
Oracle tutorial: Date Time wyjaśniający, jak używać
java.time
. -
Java Specification Request (JSR) 310, gdzie
java.time
zostało opisane po raz pierwszy. - W języku Java 6 i 7 (ThreeTen dla JSR-310) jest to implementacja języka Java 6 i 7 (ThreeTen dla JSR-310).
- Threetenabp (23), Android edition of Threeten Backport (39]}
- pytanie: Jak używać ThreeTenABP w projekcie Android , z bardzo dokładne wyjaśnienie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-07 11:45:51
String localFormat = android.text.format.DateFormat.getBestDateTimePattern(Locale.getDefault(), "EEEE MMMM d");
return new SimpleDateFormat(localFormat, Locale.getDefault()).format(localMidnight);
Zwróci format oparty na języku urządzenia. Zauważ, że getBestDateTimePattern () zwraca "najlepszą możliwą zlokalizowaną formę podanego szkieletu dla podanego locale"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-08 22:25:30
Zostały użyte błędy typu . Jeśli chcesz ustawić 08/16/2011 za podążanie za wzorcem. Jest źle, ponieważ,
Mm oznacza minuty , Użyj MM Jak to jest przez miesiące
DD jest źle , powinno być dd co oznacza dni
Spróbuj tego, aby osiągnąć wynik, który chcesz uzyskać ( Tue Aug 16 "Whatever Time" IST 2011
),
String date = "08/16/2011"; //input date as String
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy"); // date pattern
Date myDate = simpleDateFormat.parse(date); // returns date object
System.out.println(myDate); //outputs: Tue Aug 16 00:00:00 IST 2011
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-25 05:25:55