Reputation: 1513
Here is the sample I am using.
import java.util.*;
import java.text.*;
public class TimeZoneTest
{
public static final String UTC_ZONE = "UTC";
static String utcDateString = "01/11/2016 11:00:00";
public static void main (String [] args)
{
DateFormat df;
try{
df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
System.out.println("Original Date : " + utcDateString);
df.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = df.parse(utcDateString);
System.out.println(" In its Date format : " + date.toString());
System.out.println(" In its GMT format : " + date.toGMTString());
System.out.println(" In its Local format : " + date.toLocaleString());
}
catch (ParseException ex)
{
System.out.println("Exception!!!!");
}
}
}
Here is the output produced.
Original Date : 01/11/2016 11:00:00
In its Date format : Mon Jan 11 06:00:00 EST 2016
In its GMT format : 11 Jan 2016 11:00:00 GMT
In its Local format : Jan 11, 2016 6:00:00 AM
When using the time 11:00:00 and setting the TimeZone to UTC, I was expecting that the 11:00:00 which is my local time (Eastern) representation would then be converted to UTC which would produce 16:00:00.
Instead, it seems to take the string value 11:00:00 and process it as the UTC time instead of local time and return back my local time which is 06:00:00.
Is this the expected results? When you set the timezone, is it supposed to convert the time being parsed (11:00:00 ) to that timezone and produce (16:00:00)? OR When you set the timezone, is it supposed to treat the time being parsed (11:00:00 ) as though it was in that timezone and return the local time (06:00:00)?
Upvotes: 1
Views: 76
Reputation: 9645
You're last statement is true: "OR When you set the timezone, is it supposed to treat the time being parsed (11:00:00 ) as though it was in that timezone and return the local time (06:00:00)?"
Basically, you set the timezone in the DateFormat, then you parse a date without timezone information, so it'll use the timezone from the DateFormat, to convert the String to certain amount of milliseconds from January 1, 1970. Then, you print that date with "toString" that will convert it back to String using your machine's timezone. But the date is the same throughout the program, just different format/timezone.
Upvotes: 1