I am struggling with the Date API's handling of timezones and time values. I have this code:

$session_date = 'JANUARY 7, 2013';
$session_time = '9:00 AM';
$session_date_obj = new DateObject($session_date);
// Create this object and use it when storing the time to avoid default UTC timezone
$session_tz = new DateTimeZone(date_default_timezone(TRUE));
$session_time_obj = new DateObject($session_time, $session_tz);
$session_complete = $session_date_obj->format('Y-m-d') . ' ' . $session_time_obj->format('G:i');

$session_complete_obj = new DateObject($session_complete);
// $entity was previously created properly as an entity object
$entity->field_session_date[LANGUAGE_NONE][0] = array(
  'value' => $session_complete_obj->format('Y-m-d G:i'),
 );

The value stored in the entity's field_session_date field goes in as '2013-01-07 9:00'. The timezone on both the $session_date_obj and $session_time_obj is 'America/New_York', which is where I am, and timezone type 3. The objects both correctly show the granularity of the data put into them.

The problem I have is that when the field_session_date field is displayed by Drupal, the time is 4:00, not 9:00. How should I be accomplishing the storage of the date / time value into the field to get the correct adjustment of the time for the difference between the user's timezone and GMT?

Note that I did try using the DateObject merge method as follows:

$session_date = 'JANUARY 7, 2013';
$session_time = '9:00 AM';
$session_date_obj = new DateObject($session_date);
// Create this object and use it when storing the time to avoid default UTC timezone
$session_tz = new DateTimeZone(date_default_timezone(TRUE));
// The DateObject merge method requires that the value being merged in be in the form
// of a FeedsDateTime object, not a DateObject
$session_time_obj = new FeedsDateTime($session_time, $session_tz);
$session_date_obj->merge($session_time_obj);

But the merge would not execute, although I got not error message.

Thanks.