SimpleDateFormatter Unparseable date exception - java

I have a string date Wed, 30 Mar 2016 01:39:56 +0000 which i want to convert to the date format "yyyy-MM-dd"
Below are the lines of code i am trying to achieve it. But it is returning unparseable date exception
String date_s = "Wed, 30 Mar 2016 01:39:56 +0000";
SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd");
Date date = dt.parse(date_s);
SimpleDateFormat dt1 = new SimpleDateFormat("MMM d, yyyy");
System.out.println(dt1.format(date));
Any advice?

Since Java 8, you can do it in one line with the java.time library.
LocalDateTime.parse("Wed, 30 Mar 2016 01:39:56 +0000", DateTimeFormatter.RFC_1123_DATE_TIME)
.format(DateTimeFormatter.ISO_LOCAL_DATE);

'Wed, 30 Mar 2016 01:39:56 +0000' is not in the right format for yyyy-MM-dd to parse it
If you want it to work, try this:
SimpleDateFormat in = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.ENGLISH);
SimpleDateFormat out = new SimpleDateFormat("yyyy-MM-dd");
Date date = in.parse("Wed, 30 Mar 2016 01:01:01 +0000");
String outdate = out.format(date);
System.out.println(outdate);
Ideone

Related

SimpleDateFormat Java

I need the DATE_FORMAT for this case: "Thu Feb 17 08:50:02 UTC 2022"
The example code is this:
date = new SimpleDateFormat(DATE_FORMAT).parse(s);
where DATE_FORMAT is the format that I need to find and "s" is String "Thu Feb 17 08:50:02 UTC 2022"
Can someone help me ?
This should work for you:
Date date = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy").parse("Thu Feb 17 08:50:02 UTC 2022");

SimpleDateFormat throws parse Exception for +0100

I am trying with two sets of date with date format :
DateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss");
It works fine for the Date : Fri, 26 Aug 2016 13:55:34 +0000
Not for the Date : Tue, 06 Sep 2016 11:57:14 +0100
Throws exception for the +0100 date.
Unparseable date: "Tue, 06 Sep 2016 11:57:14 +0100" (at offset 0)
at java.text.DateFormat.parse(DateFormat.java:555)
It fails at offset 0, which means that the problem is not related to the timezone but to the day in letters.
You should set the Locale of your SimpleDateFormat.
DateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss", Locale.ENGLISH);
Date d1 = format.parse("Fri, 26 Aug 2016 13:55:34 +0000");
Date d2 = format.parse("Tue, 06 Sep 2016 11:57:14 +0100");
Works without any problem.
If you also need to retrieve the timezone, you will also have to add z to your pattern:
DateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH);
You need
new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
Note the z for the time zone.
The parser ignores the zero (+0000) case if z is not supplied, but not a non-zero (+0100) case. The lenient property controls this behaviour (Acknowledge #Marko Topolnik).
Since you're using English week names, you ought to use the two-argument constructor to SimpleDateFormat, passing Locale.ENGLISH as the second parameter.

java converting date in string format to timestamp

I am trying to convert a date in this format: "Fri Mar 1, 2013 4:30 PM" to a
timestamp value in this format: yyyy-mm-dd hh:mm:ss.
example:
String str = 'Fri Mar 1, 2013 4:30 PM' should output: "2013-01-14 23:59:59"
Here is what I've tried:
String string = "January 2, 2010";
Date date = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(string);
System.out.println(date);
This outputs: Sat Jan 02 00:00:00 GMT+05:30 2010
Thanks in Advance
String str = "Fri Mar 1, 2013 4:30 PM";
SimpleDateFormat sdf1 = new SimpleDateFormat("EEE MMM dd, yyyy hh:mm a");
Date date = sdf1.parse(str);
System.out.println("Date Object:" + date);
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm a");
System.out.println("Formatted Date:" + sdf2.format(date));
Output:
Date Object: Fri Mar 01 16:30:00 EST 2013
Formatted Date: 2013-03-01 16:30 PM
Assuming you are getting date and time as Date. So, You need format method of SimpleDateFormatter. Explore more patterns in the API.
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS");
Date currDate = new Date();
System.out.println("Current Date: " + currDate);
System.out.println("Formatted Date: " + sdf.format(currDate));
}
Output:
Current Date: Wed Feb 06 13:15:19 IST 2013
Formatted Date: 2013-02-06 13:15:750
If you have date in string format, you need to parse it in Date first and then format it.
Example:
String str = "Fri Mar 1, 2013 4:30 PM";
SimpleDateFormat sdf2 = new SimpleDateFormat("E MMM dd, yyyy HH:mm a");
Date parsedDate = sdf2.parse(str);
System.out.println("Parsed Date: " + parsedDate);
sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS a");
System.out.println("Formatted Date: " + sdf2.format(parsedDate));
Output:
Parsed Date: Fri Mar 01 04:30:00 IST 2013
Formatted Date: 2013-03-01 04:30:00 AM
The two previous answers were good answers in 2013. Time is moving on, and so is the handling of time information in Java. If you can use Java 8, do yourself the favour of using the date and time classes in the new java.time package (also backported to Java 6 and 7 in the ThreeTen Backport):
String str = "Fri Mar 1, 2013 4:30 PM";
LocalDateTime ldt = LocalDateTime.parse(str,
DateTimeFormatter.ofPattern("EEE MMM d, uuuu h:mm a", Locale.ENGLISH));
This produces a time without time zone of 2013-03-01T16:30. To format it into the desired output format:
System.out.println(ldt.format(DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss")));
This prints:
2013-03-01 16:30:00
Should your want your timestamp in UTC, you may convert from your computer’s time zone like this:
ldt.atZone(ZoneId.systemDefault()).toInstant()
Since I am in the Central European Time zone, on my computer it produces a point in time of 2013-03-01T15:30:00Z (where Z signifies UTC; Instant objects are always printed in UTC).
Link: ThreeTen Backport Home

Parse time with SimapleDateFormat

I'm trying to parse date like this: Tue Aug 28 21:16:23 +0000 2012 with this code:
SimpleDateFormat format = new SimpleDateFormat("E M dd HH:mm:ssZ yyyy", Locale.ENGLISH);
String d = object.getString("created_at"); // d = Tue Aug 28 21:16:23 +0000 2012;
date = format.parse(d);
But there is exception:
09-28 11:10:24.471: W/System.err(10388): java.text.ParseException: Unparseable date: "Fri Sep 28 07:09:09 +0000 2012" (at offset 4)
Where I make a mistake?
try this
SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.ENGLISH);
MMM is used to represent short Month.
you need MMM for month representation for Aug.
SimpleDateFormat format = new SimpleDateFormat("E MMM dd HH:mm:ssZ yyyy", Locale.ENGLISH);
String d = "Tue Aug 28 21:16:23 +0000 2012"; // d =;
Date date = format.parse(d);
System.out.println(date);
Output:Tue Aug 28 22:16:23 BST 2012
It might help to look into SimpleDateFormat's javadoc, there are some helpful examples for pattern strings.

How to handle the Time data from the Style just like "Wed Jun 20 11:01:05 +0800 2012"?

In my project ,I get json data from Server,there's a field named 'creat_at' in the json which style is like 'Wed Jun 20 11:01:05 +0800 2012'
How to change it to more easy-to-read style like '2012/06/20'?
(I have tried 'DateFormat.parse' but it dose not work:
new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy").parse(dateString)
cause
java.text.ParseException: Unparseable date: "Wed Jun 20 11:00:53 +0800 2012")
See SimpleDateFormat API
Date date = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy").parse(dateString);
String formattedDate = new SimpleDateFormat("yyyy/MM/dd").format(date);
You need to try SimpleDateFormat
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd");
System.out.println(sdf2.format(sdf.parse("Wed Jun 20 11:01:05 +0800 2012")));
prints
2012/06/20
You may also need to set an approriate timezone.

Categories