J145
J145

Reputation: 699

Java Date which looks same in any timezone

I am currently trying to get create a java Date which looks the same no matter what timezone I view it in. My current code is:

    Calendar cal = Calendar.getInstance();
    cal.set(2015, Calendar.JANUARY, 8, 0, 0, 0);
    cal.set(Calendar.MILLISECOND, 0);
    Date date = cal.getTime();

In my current timeZone this gives me '2015-01-08T00:00:00Z'In another this gives me 2015-01-08T00:00:00-03:00. What I want to know is if there is any way to drop the timezone part so as the time is the same in both time zones.

I would be VERY grateful for any help on this matter. Thank you.

Upvotes: 0

Views: 87

Answers (2)

ProgrammersBlock
ProgrammersBlock

Reputation: 6284

If you are only interested in the format of the time, create a java.text.SimpleDateFormat object to print your time in the format that you want. http://docs.oracle.com/javase/1.5.0/docs/api/java/text/SimpleDateFormat.html

If you want the time to be printed with the same numbers no matter the TimeZone, Use String ids[] = java.util.TimeZone.getAvailableIDs(); to get the TimeZone's IDs and find the ID that you want.

In this example, I created two SimpleDateFormat objects set to two different TimeZones. They both print off the same Calendar object. I have taken off the Z in ft2 to remove the time zone portion. By relying on toString(), I think you would be subject to Locale differences in displaying dates, like US MM/dd/yyyy and UK dd/MM/yyyy.

        TimeZone tz = TimeZone.getTimeZone("America/New_York");
        TimeZone tz2 = TimeZone.getTimeZone("America/Chicago");
        Calendar acal = new GregorianCalendar();
        SimpleDateFormat ft =  new SimpleDateFormat ("yyyy-MM-dd'T'hh:mm:ss  Z");
        ft.setTimeZone(tz);
        SimpleDateFormat ft2 =  new SimpleDateFormat ("yyyy-MM-dd'T'hh:mm:ss");
        ft2.setTimeZone(tz2);
        String date1 = ft.format(acal.getTime());

        System.out.println(date1);
        String date2 = ft2.format(acal.getTime());
        System.out.println(date2);

Output:

2015-01-08T10:36:39 -0500

2015-01-08T09:36:39

Upvotes: 0

Puce
Puce

Reputation: 38132

Java SE 8 comes with a new Date & Time API. Have a look at LocalDate and LocalDateTime.

Upvotes: 2

Related Questions