Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I convert 2018-04-10T04:00:00.000Z string to DateTime? [duplicate]

I get a date from a JSON API which looks like this "2018-04-10T04:00:00.000Z". I want to convert it in order to obtain a Date or String object and get something like "01-04-2018" that its "dd-MM-YYYY". How can I do it?

like image 950
Miguel Barra Avatar asked Apr 10 '18 11:04

Miguel Barra


People also ask

What does 000z mean in timestamp?

Where and When is Z Observed? Zulu Time Zone is often used in aviation and the military as another name for UTC +0. Zulu Time Zone is also commonly used at sea between longitudes 7.5° West and 7.5° East. The letter Z may be used as a suffix to denote a time being in the Zulu Time Zone, such as 08:00Z or 0800Z.

How do you convert time from date to string?

The strftime() method takes one or more format codes as an argument and returns a formatted string based on it. We imported datetime class from the datetime module. It's because the object of datetime class can access strftime() method. The datetime object containing current date and time is stored in now variable.

What means Z in datetime format?

This format is defined by the sensible practical standard, ISO 8601. The T separates the date portion from the time-of-day portion. The Z on the end means UTC (that is, an offset-from-UTC of zero hours-minutes-seconds). The Z is pronounced “Zulu”.


2 Answers

Update: Using DateTimeFormat, introduced in java 8:

The idea is to define two formats: one for the input format, and one for the output format. Parse with the input formatter, then format with the output formatter.

Your input format looks quite standard, except the trailing Z. Anyway, let's deal with this: "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'". The trailing 'Z' is the interesting part. Usually there's time zone data here, like -0700. So the pattern would be ...Z, i.e. without apostrophes.

The output format is way more simple: "dd-MM-yyyy". Mind the small y -s.

Here is the example code:

DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ENGLISH); DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("dd-MM-yyy", Locale.ENGLISH); LocalDate date = LocalDate.parse("2018-04-10T04:00:00.000Z", inputFormatter); String formattedDate = outputFormatter.format(date); System.out.println(formattedDate); // prints 10-04-2018 

Original answer - with old API SimpleDateFormat

SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); SimpleDateFormat outputFormat = new SimpleDateFormat("dd-MM-yyyy"); Date date = inputFormat.parse("2018-04-10T04:00:00.000Z"); String formattedDate = outputFormat.format(date); System.out.println(formattedDate); // prints 10-04-2018 
like image 124
Tamas Rev Avatar answered Oct 06 '22 09:10

Tamas Rev


Using Date pattern yyyy-MM-dd'T'HH:mm:ss.SSS'Z' and Java 8 you could do

String string = "2018-04-10T04:00:00.000Z"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ENGLISH); LocalDate date = LocalDate.parse(string, formatter); System.out.println(date); 

Update: For pre 26 use Joda time

String string = "2018-04-10T04:00:00.000Z"; DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); LocalDate date = org.joda.time.LocalDate.parse(string, formatter); 

In app/build.gradle file, add like this-

dependencies {         compile 'joda-time:joda-time:2.9.4' } 
like image 41
Deb Avatar answered Oct 06 '22 09:10

Deb