How to parse ZonedDateTime with milliseconds [duplicate] - java

This question already has answers here:
Cannot parse String in ISO 8601 format, lacking colon in offset, to Java 8 Date
(3 answers)
Closed 2 years ago.
Jira is giving me this date format via Rest API:
2021-01-21T11:08:45.000+0100
How can i parse this to a LocalDateTime in Java?
I tried
ZonedDateTime.parse("2021-01-21T11:08:45.000+0100", DateTimeFormatter.ISO_OFFSET_DATE_TIME);
Or this:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
ZonedDateTime.parse("2021-01-21T11:08:45.000+0100"), formatter);
The result is DateTimeParseException

Since the zone offset in your value is in the format +0100, it cannot be parsed with any of the predefined formatters like DateTimeFormatter.ISO_OFFSET_DATE_TIME, as it expects it to be in the format +01:00
You can parse 2021-01-21T11:08:45.000+0100 with the pattern "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
ZonedDateTime.parse("2021-01-21T11:08:45.000+0100", DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"))
The reference for DateTimeFormatter is here.

Related

Convert Date and time with timezone offset into a timestamp using Java [duplicate]

This question already has answers here:
Convert java.util.Calendar ISO 8601 format to java.sql.Timestamp
(2 answers)
java to mysql. I need convert from string parametre to timestamp
(2 answers)
Converting LocalDateTime to Timestamp format
(2 answers)
Closed 2 years ago.
I'm trying to convert 2020-11-03T14:03:45.173649-05:00 into timestamp using java.
I tried using Timestamp.valueOf("2020-11-03T14:03:45.173649-05:00"); here but getting error saying java.lang.IllegalArgumentException:Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]. Is there any way to convert Date time having timezone offset to timestamp?
Since this is an ISO format, the easiest would be to get an OffsetDateTime first and then convert to Timestamp:
var input = "2020-11-03T14:03:45.173649-05:00";
var odt = OffsetDateTime.parse(input);
var ts = Timestamp.from(odt.toInstant());
Alternatively, you can parse the string using a SimpleDateFormat.

How to convert UTC timestamp to asia/jakarta time [duplicate]

This question already has answers here:
Convert UTC date to current timezone
(5 answers)
Timezone conversion
(13 answers)
Closed 2 years ago.
I have string timestamp like
2020-05-25 08:03:24
I have tried to split the String using " " (a whitespace) as delimiter to get two Strings "2020-05-25" and "08:03:24". After that, I used substring to get the hours and added 7 to have jakarta time.
But when it is 17:01:00 for example, my calculated date is wrong.
The date given is in UTC.
I want to convert it become timezone [ASIA/Jakarta] how to convert utc timestamp become asia jakarta time?
You can use java.time if you are using Java 8 or higher.
The library provides handy possibilities of converting datetimes that don't have information about a time zone (like your example String) to a zone and handle conversions from one zone to another.
See this example:
public static void main(String[] args) {
// datetime string without a time zone or offset
String utcTimestamp = "2020-05-25 08:03:24";
// parse the datetime as it is to an object that only knows date and time (no zone)
LocalDateTime datetimeWithoutZone = LocalDateTime.parse(utcTimestamp,
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
// convert it to a zone-aware datetime object by adding a zone
ZonedDateTime utcZdt = datetimeWithoutZone.atZone(ZoneId.of("UTC"));
// print the datetime in utc once
System.out.println(utcZdt);
// then convert the zoned datetime to a different time zone
ZonedDateTime asiaJakartaZdt = utcZdt.withZoneSameInstant(ZoneId.of("Asia/Jakarta"));
// and print the result
System.out.println(asiaJakartaZdt);
}
The output is
2020-05-25T08:03:24Z[UTC]
2020-05-25T15:03:24+07:00[Asia/Jakarta]

SimpleDateFormat throwing Unparseable exception [duplicate]

This question already has answers here:
How to Format ISO-8601 in Java
(3 answers)
Converting ISO 8601-compliant String to java.util.Date
(31 answers)
Closed 4 years ago.
I know there are alot of these, but I can'e seem to find the magic string for this date format:
String textDate = "2018-04-25T18:23:57.556Z";
My code is:
String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
simpleDateFormat.parse(textDate)
What's weird is there is a "Z" in the date string itself, so I am not sure how the timezone works on this one.
If I change the date format to:
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
It works, but I am not sure how to get the time zone then...
Z = UTC
The literal "Z" is actually part of the ISO 8601 datetime standard for UTC times. When "Z" (Zulu) is tacked on the end of a time, it indicates that that time is UTC, so really the literal Z is part of the time.
The java.time classes use the ISO 8601 standard formats by default when parsing/generating strings. The Instant class represents a moment in UTC, a perfect fit for your input string.
Instant instant = Instant.parse( "2018-04-25T18:23:57.556Z" ) ;

how to change the format of Calendar object [duplicate]

This question already has answers here:
Java string to date conversion
(17 answers)
Calendar date to yyyy-MM-dd format in java
(11 answers)
java.util.Date format conversion yyyy-mm-dd to mm-dd-yyyy
(8 answers)
Closed 4 years ago.
I have a string e.g. Thu May 10 15:48:23 IST 2018. How to convert this string in the form of Calendar object with format 2018-05-10 15:48:23.84.
Start by using having a look at DateTimeFormatter and Parsing and Formatting for more details about how to parse and format date/time values in Java 8+
Based on your examples, something like...
String inValue = "Thu May 10 15:48:23 IST 2018";
DateTimeFormatter inFormatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
LocalDateTime ldt = LocalDateTime.parse(inValue, inFormatter);
DateTimeFormatter outFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS", Locale.ENGLISH);
String outValue = outFormatter.format(ldt);
System.out.println(outValue);
Will print 2018-05-10 15:48:23.00
Thank you for your response. I actually want the end result as Calendar Object with required format, not a string.
Calendar is effectively deprecated, you shouldn't be using it anymore. Even if you're not using Java 8+, you should be using the ThreeTen Backport API
Calendar (and Date and all other "date/time" class) are just containers of a value representing some point in time, they do not have any kind of "formatting" capabilities of their own. This is why the API has formatting classes. Keep you date/time values represented as appropriate classes until you need to display them, at that point, you should format the value to a String

Which date time format is this? [duplicate]

This question already has answers here:
SimpleDateFormat parsing date with 'Z' literal [duplicate]
(12 answers)
Closed 6 years ago.
I wonder which format is the following datetime value:
"2016-05-18T12:05:33Z"
This date time format is used on Zendesk's tickets in the fields of created_at and updated_at.
I know that its "yyyy-MM-ddTHH:mm:ss........", but what does the "Z" stand for?
What I want to do is parse and convert into a java.time class for storing dates and times, but I do not know which is the best one.
That is ISO 8601 format and the Z is the timezone indicator; it means UTC.
The best java.time class to use is ZonedDateTime. Example:
ZonedDateTime dateTime = ZonedDateTime.parse("2016-05-18T12:05:33Z",
DateTimeFormatter.ISO_DATE_TIME);

Categories

Resources