-1

I want to convert from UTC timezone (ex.2016-05-19T06:10:00) which is String to CEST timezone(2016-05-19T08:10:00) to String in java.

1 Answers1

5

A java.time solution:

public static void main(String[] args) {
    String orgDate = "2016-05-19T06:10:00";
    String dstDate = LocalDateTime.parse(orgDate, DateTimeFormatter.ISO_LOCAL_DATE_TIME)
                                  .atZone(ZoneId.of("UTC"))
                                  .withZoneSameInstant(ZoneId.of("CET"))
                                     // CET is deprecated timezone, see list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
                                  .format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
                                            // or use a custom formatter

    System.out.println(orgDate);
    System.out.println(dstDate); 
}

Result:

2016-05-19T06:10:00
2016-05-19T08:10
Dariusz
  • 21,561
  • 9
  • 74
  • 114
  • sorry I dont understand as LocalDateTime is not present in java.Util package, so it is showing errors. – Koneru KiranKumarReddy May 19 '16 at 12:59
  • 2
    @KoneruKiranKumarReddy `java.time` package was added in Java 8. – Pshemo May 19 '16 at 13:01
  • 1
    @KoneruKiranKumarReddy Never use the date-time classes found outside the `java.time` packages. Never use `java.util.Date`, `Calendar`, `SimpleDateFormat`, and such. They are terrible, bad design, poor implementation, built by people who did not understand the complexity of date-time handling. – Basil Bourque Jul 27 '19 at 01:14
  • Good Answer, *except* for the part where you call `.toLocalDateTime()`. The `LocalDateTime` class purposely lacks any concept of time zone or offset-from-UTC. And so that class cannot represent a moment. In calling `toLocalDateTime`, you are discarding valuable information (the time zone), rendering the resulting ambiguous. While you do so here only as a shortcut to formatting, I suggest that is bad habit, abusing the nature and purpose of a class merely for the convenience of its `toString` method. Better to call `.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) ` – Basil Bourque Jul 27 '19 at 01:18
  • 1
    @BasilBourque I agree. I like the "philosophy" behind the lack of `toLocalDateTime` conversion. I edited my answer. – Dariusz Jul 28 '19 at 04:58
  • Good. But I have another complaint: `CET` is not a [real time zone name](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). Such 2-4 character names are pseudo-zones. A real time zone has a name in `Continent/Region` format such `Europe/Paris`, `Europe/Berlin`, `Africa/Tunis`. – Basil Bourque Jul 28 '19 at 05:58
  • @BasilBourque Agreed, corrected again. I left the old value on purpose, so that others can learn that there is such a thing like a deprecated time zone. As I did, just now. – Dariusz Jul 28 '19 at 07:04