Index: feedapi_mapper_date.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/feedapi_mapper/mappers/Attic/feedapi_mapper_date.inc,v
retrieving revision 1.1.2.3
diff -u -r1.1.2.3 feedapi_mapper_date.inc
--- feedapi_mapper_date.inc	28 Feb 2008 22:35:22 -0000	1.1.2.3
+++ feedapi_mapper_date.inc	17 Mar 2008 22:08:24 -0000
@@ -1,5 +1,5 @@
 <?php
-// $Id: feedapi_mapper_date.inc,v 1.1.2.3 2008/02/28 22:35:22 alexb Exp $
+// $Id: feedapi_mapper_date.inc,v 1.1.2.2 2008/02/28 22:04:44 alexb Exp $
 
 /**
  * Implementation of hook_feedapi_mapper for date field from content.module (CCK),
@@ -26,26 +26,50 @@
       return TRUE;
     case 'map':
       // Here is where the actual mapping happens.
-      include_once(drupal_get_path('module', 'date_api') .'/date.inc');
-      $items = $node->$field_name;
       if (!is_array($feed_element)) {
-        // TODO TIMEZONE
-        // Don't know what type of date so first attempt to create a date from a string
-        $date = date_text_make_dbdate($feed_element, $field['type'], '', 'none', date_granularity_array($field));
-        if ($date->db->timestamp == '') {
-          // not from string, use the empty date object and try as a datestamp
-          date_set_date($date, $feed_element, 'none', 'db', DATE_UNIX);
-          // Note granularity is also done on submit
+        // Convert UNIX timestamps to ISO.
+        if (is_numeric($feed_element)) {
+          $feed_element = date(DATE_FORMAT_ISO, $feed_element);
+        }
+        else {
+          // Time is not numeric, try to detect time zone.
+          $parsed = date_parse($feed_element);
+          if (isset($parsed['zone'])) {
+            // This is strange: date_parse() returns an inverse offset in minutes.
+            $zone_offset = $parsed['zone'] * -60; 
+            $zone_name = _feedapi_mapper_date_get_zone_name($zone_offset); 
+          }
+        }
+        $date = date_make_date($feed_element, $zone_name);
+        $iso = date_format($date, DATE_FORMAT_ISO);
+        if (TRUE) {
+          $items = $node->$field_name;
+          $items[0]['value'] = $iso;
+          // @todo: to date 
+          // $items[0]['value2'] = '2007-04-02T06:03:02';
+          $items[0]['timezone'] = $zone_name;
+          $items[0]['offset'] = $zone_offset;
+          // $items[0]['offset2'] = -14400;
+          $node->$field_name = $items;
         }
       }
-
-      if ($field['type'] == DATE_ISO) {
-        $items[]['value'] = $date->db->iso;
-      }
-      else {
-        $items[]['value'] = $date->db->timestamp;
-      }
-      $node->$field_name = $items;
       return $node;
   }
 }
+
+/**
+ * Returns time zone name for a given time zone offset.
+ *
+ * @param seconds $zone_offset
+ * @return string zone name
+ */
+function _feedapi_mapper_date_get_zone_name($zone_offset) {
+  $time_zones = timezone_abbreviations_list();
+  foreach ($time_zones as $time_zone) {
+    foreach ($time_zone as $local_zone) {
+      if ($local_zone['offset'] == $zone_offset ) {
+        return $local_zone['timezone_id'];
+      }
+    }
+  }
+}
\ No newline at end of file
