diff --git a/gst/gstdatetime.c b/gst/gstdatetime.c
index 2045a11..caca022 100644
--- a/gst/gstdatetime.c
+++ b/gst/gstdatetime.c
@@ -621,6 +621,69 @@ gst_date_time_new (gfloat tzoffset, gint year, gint month, gint day, gint hour,
   return datetime;
 }
 
+static gchar *
+gst_date_time_to_string_check(GstDateTime * datetime,
+    GstDateTimeFields max_fields)
+{
+  gfloat gmt_offset;
+
+  if (!max_fields || max_fields > datetime->fields)
+    max_fields = datetime->fields;
+
+  switch (max_fields) {
+    case GST_DATE_TIME_FIELDS_Y:
+      return g_date_time_format (datetime->datetime, "%Y");
+    case GST_DATE_TIME_FIELDS_YM:
+      return g_date_time_format (datetime->datetime, "%Y-%m");
+    case GST_DATE_TIME_FIELDS_YMD:
+      return g_date_time_format (datetime->datetime, "%F");
+    case GST_DATE_TIME_FIELDS_YMD_HM:
+      gmt_offset = gst_date_time_get_time_zone_offset (datetime);
+      if (gmt_offset == 0)
+        return g_date_time_format (datetime->datetime, "%F-%RZ");
+      else
+        return g_date_time_format (datetime->datetime, "%F-%R%z");
+    case GST_DATE_TIME_FIELDS_YMD_HMS:
+      gmt_offset = gst_date_time_get_time_zone_offset (datetime);
+      if (gmt_offset == 0)
+        return g_date_time_format (datetime->datetime, "%F-%TZ");
+      else
+        return g_date_time_format (datetime->datetime, "%F-%T%z");
+    default:
+      return NULL;
+  }
+}
+
+gchar *
+gst_date_time_y_string (GstDateTime * datetime)
+{
+  return gst_date_time_to_string_check(datetime, GST_DATE_TIME_FIELDS_Y);
+}
+
+gchar *
+gst_date_time_ym_string (GstDateTime * datetime)
+{
+  return gst_date_time_to_string_check(datetime, GST_DATE_TIME_FIELDS_YM);
+}
+
+gchar *
+gst_date_time_ymd_string (GstDateTime * datetime)
+{
+  return gst_date_time_to_string_check(datetime, GST_DATE_TIME_FIELDS_YMD);
+}
+
+gchar *
+gst_date_time_ymd_hm_string (GstDateTime * datetime)
+{
+  return gst_date_time_to_string_check(datetime, GST_DATE_TIME_FIELDS_YMD_HM);
+}
+
+gchar *
+gst_date_time_ymd_hms_string (GstDateTime * datetime)
+{
+  return gst_date_time_to_string_check(datetime, GST_DATE_TIME_FIELDS_YMD_HMS);
+}
+
 static void
 gst_date_time_free (GstDateTime * datetime)
 {
diff --git a/gst/gstdatetime.h b/gst/gstdatetime.h
index 04c8299..e9c7de4 100644
--- a/gst/gstdatetime.h
+++ b/gst/gstdatetime.h
@@ -87,6 +87,13 @@ GstDateTime *   gst_date_time_new_now_local_time (void) G_GNUC_MALLOC;
 
 GstDateTime *   gst_date_time_new_now_utc        (void) G_GNUC_MALLOC;
 
+
+gchar *         gst_date_time_y_string           (GstDateTime * datetime);
+gchar *         gst_date_time_ym_string          (GstDateTime * datetime);
+gchar *         gst_date_time_ymd_string         (GstDateTime * datetime);
+gchar *         gst_date_time_ymd_hm_string      (GstDateTime * datetime);
+gchar *         gst_date_time_ymd_hms_string     (GstDateTime * datetime);
+
 /* refcounting */
 
 GstDateTime *   gst_date_time_ref                (GstDateTime * datetime);
