Reputation: 3943
I have a string from a json response:
start: "2013-09-18T20:40:00+0000",
end: "2013-09-18T21:39:00+0000",
How do i convert this string to a java DateTime Object?
i have tried using the following:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
start = sdf.parse("2013-09-18T20:40:00+0000");
but with this i can only create a Date Object. But the time binded in the String is kinda essential.
Any Help is greatly appreciated!
Upvotes: 22
Views: 121213
Reputation: 381
Have you try this?
Date date1=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2013-09-18T20:40:00+0000".replace("T"," ").substring(0,19));
Upvotes: -1
Reputation: 86276
I recommend that you use java.time, the modern Java date and time API, for your date and time work.
String startStr = "2013-09-18T20:40:00+0000";
OffsetDateTime start = OffsetDateTime.parse(startStr, isoFormatter);
System.out.println(start);
Output is:
2013-09-18T20:40Z
I was using this formatter:
private static final DateTimeFormatter isoFormatter = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
.appendOffset("+HHMM", "+0000")
.toFormatter();
If by a DateTime
object you meant org.joda.time.Datetime
, please read this quote from the Joda-Time homepage (boldface is original):
Note that from Java SE 8 onwards, users are asked to migrate to
java.time
(JSR-310) - a core part of the JDK which replaces this project.
The SimpleDateFormat
class that you tried to use in the question is a notorious troublemaker of a class and long outdated. Under no circumstances use it. Ever.
Upvotes: 1
Reputation: 45060
You can create Joda DateTime object from the Java Date object, since Java does not have a DateTime
class.
DateTime dt = new DateTime(start.getTime());
Though the Date
class of Java holds the time information as well(that's what you need in the first place), I suggest you to use a Calendar
instead of the Date
class of Java.
Calendar myCal = new GregorianCalendar();
myCal.setTime(date);
Have a look at the Calendar docs for more info on how you can use it more effectively.
Things have changed and now even Java (Java 8 to be precise), has a LocalDateTime and ZonedDateTime class. For conversions, you can have a look at this SO answer(posting an excerpt from there).
Given: Date date = [some date]
(1) LocalDateTime << Instant<< Date
Instant instant = Instant.ofEpochMilli(date.getTime());
LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneOffset.UTC);
(2) Date << Instant << LocalDateTime
Instant instant = ldt.toInstant(ZoneOffset.UTC);
Date date = Date.from(instant);
Upvotes: 10
Reputation: 22233
You don't need a DateTime
object. java.util.Date
stores the time too.
int hours = start.getHours(); //returns the hours
int minutes = start.getMinutes(); //returns the minutes
int seconds = start.getSeconds(); //returns the seconds
As R.J says, these methods are deprecated, so you can use the java.util.Calendar
class:
Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf.parse("2013-09-18T20:40:00+0000"));
int hour = calendar.get(Calendar.HOUR); //returns the hour
int minute = calendar.get(Calendar.MINUTE); //returns the minute
int second = calendar.get(Calendar.SECOND); //returns the second
Note: on my end, sdf.parse("2013-09-18T20:40:00+0000")
fires a
java.text.ParseException: Unparseable date: "2013-09-18T20:40:00+0000"
at java.text.DateFormat.parse(DateFormat.java:357)
at MainClass.main(MainClass.java:16)
Upvotes: 10
Reputation: 22710
You can use DateTimeFormatter
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
DateTime time = format.parseDateTime("2013-09-18T20:40:00+0000");
Upvotes: 7