datetime: Use seconds as double

Use seconds as double to make API similar to glib's
gdatetime. Also move timezone parameter to the
first position, just like glib's.

https://bugzilla.gnome.org/show_bug.cgi?id=628408
This commit is contained in:
Thiago Santos 2010-10-12 15:13:48 -03:00
parent 0d3c623b4b
commit e9312870e5
5 changed files with 38 additions and 39 deletions

View file

@ -25,6 +25,7 @@
#include "gst_private.h"
#include "gstdatetime.h"
#include <glib.h>
#include <math.h>
/**
* SECTION:gstdatetime
@ -180,6 +181,7 @@
/**
* gst_date_time_new:
* @tzoffset: Offset from UTC in hours.
* @year: the gregorian year
* @month: the gregorian month
* @day: the day of the gregorian month
@ -187,7 +189,6 @@
* @minute: the minute of the hour
* @second: the second of the minute
* @microsecond: the microsecond of the second
* @tzoffset: Offset from UTC in hours.
*
* Creates a new #GstDateTime using the date and times in the gregorian calendar
* in the supplied timezone.
@ -422,20 +423,19 @@ gst_date_time_new_from_unix_epoch (gint64 secs)
memcpy (&tm, localtime (&tt), sizeof (struct tm));
#endif
dt = gst_date_time_new (tm.tm_year + 1900,
tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, 0, 0);
dt = gst_date_time_new (0, tm.tm_year + 1900,
tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
gst_date_time_set_local_timezone (dt);
return dt;
}
GstDateTime *
gst_date_time_new_local_time (gint year, gint month, gint day, gint hour,
gint minute, gint second, gint microsecond)
gint minute, gdouble seconds)
{
GstDateTime *dt;
dt = gst_date_time_new (year, month, day, hour, minute, second, microsecond,
0);
dt = gst_date_time_new (0, year, month, day, hour, minute, seconds);
gst_date_time_set_local_timezone (dt);
@ -443,24 +443,25 @@ gst_date_time_new_local_time (gint year, gint month, gint day, gint hour,
}
GstDateTime *
gst_date_time_new (gint year, gint month, gint day, gint hour,
gint minute, gint second, gint microsecond, gfloat tzoffset)
gst_date_time_new (gfloat tzoffset, gint year, gint month, gint day, gint hour,
gint minute, gdouble seconds)
{
GstDateTime *dt;
g_return_val_if_fail (hour >= 0 && hour < 24, NULL);
g_return_val_if_fail (minute >= 0 && minute < 60, NULL);
g_return_val_if_fail (second >= 0 && second < 60, NULL);
g_return_val_if_fail (microsecond >= 0 && microsecond < 1000000, NULL);
g_return_val_if_fail (seconds >= 0 && seconds < 60, NULL);
g_return_val_if_fail (tzoffset >= -12.0 && tzoffset <= 12.0, NULL);
if (!(dt = gst_date_time_new_from_date (year, month, day)))
return NULL;
dt->usec = (hour * GST_DATE_TIME_USEC_PER_HOUR)
+ (minute * GST_DATE_TIME_USEC_PER_MINUTE)
+ (second * GST_DATE_TIME_USEC_PER_SECOND)
+ microsecond;
dt->tzoffset = (gint) (60 * tzoffset);
+ (guint64) (floor (seconds * GST_DATE_TIME_USEC_PER_SECOND + 0.5));
/* we store in minutes */
dt->tzoffset = (gint) tzoffset *60.0;
return dt;
}
@ -663,10 +664,10 @@ gst_date_time_new_from_unix_epoch (gint64 secs)
GstDateTime *
gst_date_time_new_local_time (gint year, gint month, gint day, gint hour,
gint minute, gint second, gint microsecond)
gint minute, gdouble seconds)
{
return gst_date_time_new_from_gdatetime (g_date_time_new_local (year, month,
day, hour, minute, second + (microsecond / 1000000.0)));
day, hour, minute, seconds));
}
GstDateTime *
@ -690,8 +691,8 @@ priv_gst_date_time_compare (gconstpointer dt1, gconstpointer dt2)
}
GstDateTime *
gst_date_time_new (gint year, gint month, gint day, gint hour, gint minute,
gint second, gint microsecond, gfloat tzoffset)
gst_date_time_new (gfloat tzoffset, gint year, gint month, gint day, gint hour,
gint minute, gdouble seconds)
{
gchar buf[6];
GTimeZone *tz;
@ -705,8 +706,7 @@ gst_date_time_new (gint year, gint month, gint day, gint hour, gint minute,
tzminute);
tz = g_time_zone_new (buf);
dt = g_date_time_new (tz, year, month, day, hour, minute,
second + (microsecond / 1000000.0));
dt = g_date_time_new (tz, year, month, day, hour, minute, seconds);
g_time_zone_unref (tz);
return gst_date_time_new_from_gdatetime (dt);
}

View file

@ -49,14 +49,12 @@ GstDateTime *gst_date_time_new_from_unix_epoch (gint64 secs);
GstDateTime *gst_date_time_new_local_time (gint year, gint month,
gint day, gint hour,
gint minute,
gint second,
gint microsecond);
GstDateTime *gst_date_time_new (gint year, gint month,
gdouble seconds);
GstDateTime *gst_date_time_new (gfloat tzoffset,
gint year, gint month,
gint day, gint hour,
gint minute,
gint second,
gint microsecond,
gfloat tzoffset);
gdouble seconds);
GstDateTime *gst_date_time_new_now_local_time (void);
GstDateTime *gst_date_time_new_now_utc (void);

View file

@ -4376,7 +4376,7 @@ static gchar *
gst_value_serialize_date_time (const GValue * val)
{
GstDateTime *date = (GstDateTime *) g_value_get_boxed (val);
gint offset;
gfloat offset;
gint tzhour, tzminute;
if (date == NULL)
@ -4417,8 +4417,8 @@ gst_value_deserialize_date_time (GValue * dest, const gchar * s)
} else
return FALSE;
g_value_take_boxed (dest, gst_date_time_new (year, month, day, hour,
minute, second, usecond, tzoffset));
g_value_take_boxed (dest, gst_date_time_new (tzoffset, year, month, day, hour,
minute, second + (usecond / 1000000.0)));
return TRUE;
}

View file

@ -111,19 +111,19 @@ GST_START_TEST (test_GstDateTime_get_hour)
{
GstDateTime *dt;
dt = gst_date_time_new (2009, 10, 19, 15, 13, 11, 0, 0);
dt = gst_date_time_new (0, 2009, 10, 19, 15, 13, 11);
assert_equals_int (15, gst_date_time_get_hour (dt));
gst_date_time_unref (dt);
dt = gst_date_time_new (100, 10, 19, 1, 0, 0, 0, 0);
dt = gst_date_time_new (0, 100, 10, 19, 1, 0, 0);
assert_equals_int (1, gst_date_time_get_hour (dt));
gst_date_time_unref (dt);
dt = gst_date_time_new (100, 10, 19, 0, 0, 0, 0, 0);
dt = gst_date_time_new (0, 100, 10, 19, 0, 0, 0);
assert_equals_int (0, gst_date_time_get_hour (dt));
gst_date_time_unref (dt);
dt = gst_date_time_new (100, 10, 1, 23, 59, 59, 0, 0);
dt = gst_date_time_new (0, 100, 10, 1, 23, 59, 59);
assert_equals_int (23, gst_date_time_get_hour (dt));
gst_date_time_unref (dt);
}
@ -136,7 +136,8 @@ GST_START_TEST (test_GstDateTime_get_microsecond)
GstDateTime *dt;
g_get_current_time (&tv);
dt = gst_date_time_new (2010, 7, 15, 11, 12, 13, tv.tv_usec, 0);
dt = gst_date_time_new (0, 2010, 7, 15, 11, 12,
13 + (tv.tv_usec / 1000000.0));
assert_equals_int (tv.tv_usec, gst_date_time_get_microsecond (dt));
gst_date_time_unref (dt);
}
@ -147,7 +148,7 @@ GST_START_TEST (test_GstDateTime_get_minute)
{
GstDateTime *dt;
dt = gst_date_time_new (2009, 12, 1, 1, 31, 0, 0, 0);
dt = gst_date_time_new (0, 2009, 12, 1, 1, 31, 0);
assert_equals_int (31, gst_date_time_get_minute (dt));
gst_date_time_unref (dt);
}
@ -158,7 +159,7 @@ GST_START_TEST (test_GstDateTime_get_second)
{
GstDateTime *dt;
dt = gst_date_time_new (2009, 12, 1, 1, 31, 44, 0, 0);
dt = gst_date_time_new (0, 2009, 12, 1, 1, 31, 44);
assert_equals_int (44, gst_date_time_get_second (dt));
gst_date_time_unref (dt);
}
@ -169,7 +170,7 @@ GST_START_TEST (test_GstDateTime_new_full)
{
GstDateTime *dt;
dt = gst_date_time_new (2009, 12, 11, 12, 11, 10, 1234, 0);
dt = gst_date_time_new (0, 2009, 12, 11, 12, 11, 10.001234);
assert_equals_int (2009, gst_date_time_get_year (dt));
assert_equals_int (12, gst_date_time_get_month (dt));
assert_equals_int (11, gst_date_time_get_day (dt));

View file

@ -2010,7 +2010,7 @@ GST_START_TEST (test_date_time)
gchar *str;
/* utc timezone */
datetime = gst_date_time_new (2010, 6, 23, 7, 40, 10, 0, 0);
datetime = gst_date_time_new (0, 2010, 6, 23, 7, 40, 10);
s = gst_structure_new ("media/x-type", "SOME_DATE_TIME_TAG",
GST_TYPE_DATE_TIME, datetime, NULL);
@ -2066,7 +2066,7 @@ GST_START_TEST (test_date_time)
str = NULL;
/* with timezone */
datetime = gst_date_time_new (2010, 6, 23, 7, 40, 10, 1, -3.0);
datetime = gst_date_time_new (-3.0, 2010, 6, 23, 7, 40, 10.000001);
s = gst_structure_new ("media/x-type", "SOME_DATE_TIME_TAG",
GST_TYPE_DATE_TIME, datetime, NULL);
@ -2122,7 +2122,7 @@ GST_START_TEST (test_date_time)
str = NULL;
/* with positive timezone */
datetime = gst_date_time_new (2010, 6, 23, 7, 40, 10, 1, 2);
datetime = gst_date_time_new (2.0, 2010, 6, 23, 7, 40, 10.000001);
s = gst_structure_new ("media/x-type", "SOME_DATE_TIME_TAG",
GST_TYPE_DATE_TIME, datetime, NULL);