Android Unparseable date Exception - java

I get a Unparseable date when trying to parse a Date string that is sent to my android client.
This is the exception:
java.text.ParseException: Unparseable date: "2018-09-18T00:00:00Z" (at
offset 19) at java.text.DateFormat.parse(DateFormat.java:571)
The date format my C# based backend sends (The C# object Property is DateTime):
2018-09-18T00:00:00Z
My Java Code where it fails:
SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss aa");
String targetDate = "2018-09-18T00:00:00Z";
Date date = dateFormat.parse(targetDate));
How can I change my code to parse the exact format sent by the backend?

You have to change the format String to:
SimpleDateFormat dateFormatParse = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss'Z'");
String targetDate = "2018-09-18T00:00:00Z";
Date dateString = dateFormatParse.parse(targetDate));

The date format sent by your backend follows ISO-8601 instant format.
You can use LocalDate.parse(targetDate, DateTimeFormatter.ISO_INSTANT) to parse it.
LocalDate supports only SDK 26+, android 8 and higher

Related

How to parse a yyyy-MM-dd HH:mm:ss to Date?

I'm trying to parse a date with the format "" to Date.
DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date date = sdf.parse(dateStr);
String = sdf.format(date);
An example of the dateStr is "2020-04-14 16:34:40.0117372".
I get an error when trying to parse the string, but I don't know why.
The error I'm getting is the following:
java.text.ParseException: Unparseable date: "2020-04-14 16:34:40.0117372"
Why can't I parse this date? How can I do it?
You are using "dd/MM/yyyy" for date format, but you should be using "yyyy-MM-dd" (inverse order, and dashes instead of slashes)
Also I suggest you use modern java.time packages and do something like this:
String str = "2020-04-14 16:34:40.0117372";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSS");
LocalDateTime dateTime = LocalDateTime.parse(str, formatter);
Edit: Having 7 digits for milliseconds is correct, first digits for milliseconds and the rest for nanoseconds. strange. Usually you want 3 digits because 1000 milliseconds is a second. You likely have nanoseconds, which should be dealt with by this method.

Conversion of UTC to IST time in java is working in LOCAL but not in CLOUD SERVER

I am working in date conversion in java in that i am using following code snippet to convert the UTC time to IST format.It is working properly in the local when i run it but when i deploy it in server its not converting , its displaying only the utc time itself.Is there any configuaration is needed in server side.Please help me out.
CODE SNIPPET:
DateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
String pattern = "dd-MM-yyyy HH:mm:ss";
SimpleDateFormat formatter;
formatter = new SimpleDateFormat(pattern);
try {
String formattedDate = formatter.format(utcDate);
Date ISTDate = sdf.parse(formattedDate);
String ISTDateString = formatter.format(ISTDate);
return ISTDateString;
}
Java Date objects are already/always in UTC. Time Zone is something that is applied when formatting to text. A Date cannot (should not!) be in any time zone other than UTC.
So, the entire concept of converting utcDate to ISTDate is flawed.
(BTW: Bad name. Java conventions says it should be istDate)
Now, if you want the code to return the date as text in IST time zone, then you need to request that:
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
formatter.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata")); // Or whatever IST is supposed to be
return formatter.format(utcDate);
Using Java 8 New API,
Instant s = Instant.parse("2019-09-28T18:12:17Z");
ZoneId.of("Asia/Kolkata");
LocalDateTime l = LocalDateTime.ofInstant(s, ZoneId.of("Asia/Kolkata"));
System.out.println(l);

Unable converting String into Date in Java

I want to convert String into Date in Java.
I have written following code for that:
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss.SSSSSS");
Date date = dateformat.parse("2015-07-16 23:59:59.0");
dateformat.format(date);
After parsing I am getting following value for date : Fri Jan 16 23:59:59 IST 2015
I have tried many examples but didn't get proper solution.
Thanks in advance.
"mm" in the format string stands for minutes. You need to specify "MM" for the month part, or it defaults to January:
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS");
As you said you want to convert string to date then it will be received only in that format.
We cant format date in java we can format string representation of date using dateforamtter but if you are converting string to date it will be received in only that format that will be unformatted.

Parsing timestamp with timezone in java?

I'm trying to parse a string of format timestamp with timezone obtained from a DB. The String is as follows :
SimpleDateFormat mdyFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSZ");
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Date d1 = mdyFormat.parse("2014-04-01 15:19:49.31146+05:30");
String mdx = sdf.format(d1);
System.out.println(mdx);
Problem is, I get an error saying :
Exception in thread "main" java.text.ParseException: Unparseable date: "2014-04-01 15:19:49.31146+05:30"
at java.text.DateFormat.parse(DateFormat.java:357)
at com.karthik.Timestampvalidate.main(Timestampvalidate.java:31)
Does anyone know how to fix this ?
You need to use X instead of Z:
SimpleDateFormat mdyFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSX");
See the javadoc for more info.
Note: only available in Java 7+.
If you get to use the new JSR 310 date/time APIs in Java 8, you can use the XXX format to parse the timezone. You need three Xs to get the specific colon-separated offset that you're using.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSXXX");
TemporalAccessor dateTime = formatter.parse("2014-04-01 15:19:49.31146+05:30");
// returns: {OffsetSeconds=19800},ISO resolved to 2014-04-01T15:19:49.311460

convert string to Mysql time stamp in servlet java

hi i am passing my date time string using get method in apache servlet and it goes like this
http://localhost:8084/example/Time_ser?date=15/03/2013%2004:14:30%20PM
and i am using
String time=request.getParameter("date");
to get the date value.....
and my java code to convert the string to timestamp is given below
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss aa");
java.util.Date date = (java.util.Date)formatter.parse(time);
Timestamp timets = new Timestamp(date.getTime());
but it shows error like this
java.text.ParseException: Unparseable date: "15/03/2013 04:14:30 PM"
am i doing anything wrong please help me..........
use / not - because you date is formatted as 15/03/2013 04:14:30 PM.
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss aa");

Categories