I have a simple script
<cfscript>
public string function convertTimeZone(
string toTimeZone = "America/New_York"
, date thisDate = now()
){
var azTimeZone = createObject("java", "java.util.TimeZone").getTimeZone(javaCast("string","US/Arizona"));
var azCalendar = createObject("java", "java.util.GregorianCalendar" ).init(azTimeZone);
azCalendar.set(
javaCast( "int", year( arguments.thisDate ) ),
javaCast( "int", (month( arguments.thisDate ) - 1) ),
javaCast( "int", day( arguments.thisDate ) ),
javaCast( "int", hour( arguments.thisDate ) ),
javaCast( "int", minute( arguments.thisDate ) ),
javaCast( "int", second( arguments.thisDate ) )
);
var newCal = azCalendar.clone();
newCal.setTimeInMillis(azCalendar.getTimeInMillis());
newCal.setTimeZone(javaCast("string",arguments.toTimeZone));
writeOutput('AZ Cal');
writeDump(azCalendar);
writeDump(azCalendar.Timezone);
writeDump(azCalendar.Time);
writeDump(azCalendar.getTime());
writeOutput('New Cal');
writeDump(newCal);
writeDump(newCal.Timezone);
writeDump(newCal.Time);
writeDump(newCal.getTime());
}
convertTimeZone();
</cfscript>
If you look at the output you will see that the new calendar contains the correct timezone and time but if I use getTime() it is not returning the correct value. I am sure that I have done something either in setting the time in the new calendar or maybe even the clone but I can't quite figure it out.
If I add writeDump(newCal.getTimezone());
to the list of dumps I do get "America/New_York"