I have this code, it's a simple string that I want to parse it to a LocalDateTime
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
public class DateClass {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String dateRaw = "2019-05-03 7:05:03";
DateTimeFormatter dtf = new DateTimeFormatterBuilder().appendPattern("uuuu-mm-dd HH:mm:ss").toFormatter();
LocalDateTime date= LocalDateTime.parse(dateRaw, dtf);
System.out.println(date.toString());
}
}
And when y runing, I have the next error:
Exception in thread "main" java.time.format.DateTimeParseException: Text '2019-05-03 7:05:03' could not be parsed at index 11
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.LocalDateTime.parse(LocalDateTime.java:492)
at lectordeachvio.DateClass.main(DateClass.java:18)
what I doing wrong? and why has a fault with de space????
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd H:mm:ss");
With this change your program outputs:
2019-05-03T07:05:03
H
will match hour of day in either 1 or two digits. That is, it will accept 7
, 07
, 13
, etc. Two HH
on the other hand requires two digits like 07
or 13
, so 7
alone cannot be parsed. This was the reason for the exception that you got.7
is. Indices are 0-based.MM
for month number. Lowercase mm
is for minute of hour.DateTimeFormatterBuilder
for this case. DateTimeFormatter.ofPattern
works OK.Just out of curiosity, if your formatter is for parsing only, you may omit all repetitions of pattern letters. This works too:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("u-M-d H:m:s");
Normally we would not want this, though. We’d prefer to validate that there are two digits for minutes and seconds, often also for month and day of month. Putting two pattern letters accomplishes that.
Partly related question about mm
in the format pattern: Convert LocalDate in DD/MM/YYYY LocalDate [duplicate].