diff --git a/computed_field.install b/computed_field.install
index de571fe..1d58ac3 100644
--- a/computed_field.install
+++ b/computed_field.install
@@ -36,6 +36,13 @@ function computed_field_field_schema($field) {
         $columns['value']['precision'] = isset($settings['database']['data_precision']) ? $settings['database']['data_precision'] : 10;
         $columns['value']['scale'] = isset($settings['database']['data_scale']) ? $settings['database']['data_scale'] : 2;
       }
+      // 'datetime' fields get extra type info.
+      if ($settings['database']['data_type'] == 'datetime') {
+        $columns['value']['mysql_type'] = 'datetime';
+        $columns['value']['pgsql_type'] = 'timestamp without time zone';
+        $columns['value']['sqlite_type'] = 'varchar';
+        $columns['value']['sqlsrv_type'] = 'smalldatetime';
+      }
       // Add 'not null' settings.
       $columns['value']['not null'] = isset($settings['database']['data_not_NULL']) ? $settings['database']['data_not_NULL'] : TRUE;
       // Add default values if set.
diff --git a/computed_field.module b/computed_field.module
index 218964a..2a42065 100644
--- a/computed_field.module
+++ b/computed_field.module
@@ -71,6 +71,7 @@ function computed_field_field_info() {
           'data_default' => NULL,
           'data_index' => FALSE,
         ),
+        'tz_handling' => 'site',
       ),
       'default_widget' => 'computed',
       'default_formatter' => 'computed_field_plain',
@@ -95,6 +96,9 @@ function computed_field_entity_property_callback(&$info, $entity_type, $field, $
     'text' => 'text',
     'longtext' => 'text',
   );
+  if (module_exists('date')) {
+    $property_types['datetime'] = 'date';
+  }
   if (isset($field['columns']['value'], $property_types[$field['columns']['value']['type']])) {
     // Entity API's defaults are pretty good so set the property_type and let them do the work for us.
     $field_type['property_type'] = $property_types[$field['columns']['value']['type']];
@@ -204,6 +208,9 @@ function computed_field_field_settings_form($field, $instance, $has_data) {
     '#required' => FALSE,
     '#disabled' => $has_data,
   );
+  if (module_exists('date')) {
+    $form['database']['data_type']['#options']['datetime'] = 'datetime';
+  }
   $form['database']['data_length'] = array(
     '#type' => 'textfield',
     '#title' => t('Data Length (varchar/text)'),
@@ -486,6 +493,7 @@ function computed_field_field_is_empty($item, $field) {
     case 'varchar':
     case 'text':
     case 'longtext':
+    case 'datetime':
       // For strings, the field is empty if it doesn't match the empty string.
       $empty = ($item['value'] === '');
       break;
@@ -543,6 +551,44 @@ function computed_field_views_data_alter(&$data) {
   );
 }
 
+/**
+ * Implements hook_field_views_data_alter().
+ */
+function computed_field_field_views_data_alter(&$result, $field, $module) {
+  $field_name = $field['field_name'];
+  if ($module == 'computed_field' && $field['settings']['database']['data_type'] == 'datetime' && module_exists('date_views')) {
+    foreach ($result as $table => $data) {
+      foreach ($data as $column => $value) {
+        // Only alter the date value column.
+        $this_column = NULL;
+        foreach (array_keys($field['columns']) as $candidate_column) {
+          if ($column == $field['field_name'] . '_' . $candidate_column) {
+            $this_column = $candidate_column;
+            break;
+          }
+        }
+        if ($this_column != 'value') {
+          continue;
+        }
+
+        if (array_key_exists('argument', $value)) {
+          $result[$table][$column]['argument']['handler'] = 'date_views_argument_handler_simple';
+          $result[$table][$column]['argument']['empty field name'] = t('Undated');
+          $result[$table][$column]['argument']['is date'] = TRUE;
+        }
+        if (array_key_exists('filter', $value)) {
+          $result[$table][$column]['filter']['handler'] = 'date_views_filter_handler_simple';
+          $result[$table][$column]['filter']['empty field name'] = t('Undated');
+          $result[$table][$column]['filter']['is date'] = TRUE;
+        }
+        if (array_key_exists('sort', $value)) {
+          $result[$table][$column]['sort']['is date'] = TRUE;
+        }
+      }
+    }
+  }
+}
+
 /**
  * Description of computed_field_handler_aggregate.
  */
