mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-29 20:35:40 +00:00
datetime: Add _from_unix_epoch variants
Adds 2 variants for the gst_date_time_from_unix_epoch function, one for UTC and another for local time. API: gst_date_time_new_from_unix_epoch_utc API: gst_date_time_new_from_unix_epoch_local_time Fixes #653031 https://bugzilla.gnome.org/show_bug.cgi?id=635031
This commit is contained in:
parent
b804d53320
commit
1b27e1e792
5 changed files with 102 additions and 11 deletions
|
@ -374,6 +374,7 @@ AC_MSG_RESULT($have_tm_gmtoff)
|
|||
dnl *** checks for library functions ***
|
||||
|
||||
AC_CHECK_FUNCS([gmtime_r])
|
||||
AC_CHECK_FUNCS([localtime_r])
|
||||
AC_CHECK_FUNCS([sigaction])
|
||||
|
||||
dnl check for fseeko()
|
||||
|
|
|
@ -146,7 +146,7 @@
|
|||
*/
|
||||
|
||||
/**
|
||||
* gst_date_time_new_from_unix_epoch:
|
||||
* gst_date_time_new_from_unix_epoch_local_time:
|
||||
* @secs: seconds from the Unix epoch
|
||||
*
|
||||
* Creates a new #GstDateTime using the time since Jan 1, 1970 specified by
|
||||
|
@ -157,6 +157,18 @@
|
|||
* Since: 0.10.31
|
||||
*/
|
||||
|
||||
/**
|
||||
* gst_date_time_new_from_unix_epoch_utc:
|
||||
* @secs: seconds from the Unix epoch
|
||||
*
|
||||
* Creates a new #GstDateTime using the time since Jan 1, 1970 specified by
|
||||
* @secs. The #GstDateTime is in the UTC timezone.
|
||||
*
|
||||
* Return value: the newly created #GstDateTime
|
||||
*
|
||||
* Since: 0.10.31
|
||||
*/
|
||||
|
||||
/**
|
||||
* gst_date_time_new_local_time:
|
||||
* @year: the gregorian year
|
||||
|
@ -408,7 +420,7 @@ gst_date_time_get_time_zone_offset (const GstDateTime * datetime)
|
|||
}
|
||||
|
||||
GstDateTime *
|
||||
gst_date_time_new_from_unix_epoch (gint64 secs)
|
||||
gst_date_time_new_from_unix_epoch_local_time (gint64 secs)
|
||||
{
|
||||
GstDateTime *dt;
|
||||
struct tm tm;
|
||||
|
@ -429,6 +441,27 @@ gst_date_time_new_from_unix_epoch (gint64 secs)
|
|||
return dt;
|
||||
}
|
||||
|
||||
GstDateTime *
|
||||
gst_date_time_new_from_unix_epoch_utc (gint64 secs)
|
||||
{
|
||||
GstDateTime *dt;
|
||||
struct tm tm;
|
||||
time_t tt;
|
||||
|
||||
memset (&tm, 0, sizeof (tm));
|
||||
tt = (time_t) secs;
|
||||
|
||||
#ifdef HAVE_GMTIME_R
|
||||
gmtime_r (&tt, &tm);
|
||||
#else
|
||||
memcpy (&tm, gmtime (&tt), sizeof (struct tm));
|
||||
#endif
|
||||
|
||||
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);
|
||||
return dt;
|
||||
}
|
||||
|
||||
GstDateTime *
|
||||
gst_date_time_new_local_time (gint year, gint month, gint day, gint hour,
|
||||
gint minute, gdouble seconds)
|
||||
|
@ -473,7 +506,7 @@ gst_date_time_new_now_local_time (void)
|
|||
GTimeVal tv;
|
||||
g_get_current_time (&tv);
|
||||
|
||||
datetime = gst_date_time_new_from_unix_epoch (tv.tv_sec);
|
||||
datetime = gst_date_time_new_from_unix_epoch_local_time (tv.tv_sec);
|
||||
datetime->usec += tv.tv_usec;
|
||||
gst_date_time_set_local_timezone (datetime);
|
||||
return datetime;
|
||||
|
@ -656,12 +689,19 @@ gst_date_time_get_time_zone_offset (const GstDateTime * datetime)
|
|||
}
|
||||
|
||||
GstDateTime *
|
||||
gst_date_time_new_from_unix_epoch (gint64 secs)
|
||||
gst_date_time_new_from_unix_epoch_local_time (gint64 secs)
|
||||
{
|
||||
return
|
||||
gst_date_time_new_from_gdatetime (g_date_time_new_from_unix_local (secs));
|
||||
}
|
||||
|
||||
GstDateTime *
|
||||
gst_date_time_new_from_unix_epoch_utc (gint64 secs)
|
||||
{
|
||||
return
|
||||
gst_date_time_new_from_gdatetime (g_date_time_new_from_unix_utc (secs));
|
||||
}
|
||||
|
||||
GstDateTime *
|
||||
gst_date_time_new_local_time (gint year, gint month, gint day, gint hour,
|
||||
gint minute, gdouble seconds)
|
||||
|
|
|
@ -45,7 +45,8 @@ gint gst_date_time_get_second (const GstDateTime * datetime);
|
|||
gint gst_date_time_get_microsecond (const GstDateTime * datetime);
|
||||
gfloat gst_date_time_get_time_zone_offset (const GstDateTime * datetime);
|
||||
|
||||
GstDateTime *gst_date_time_new_from_unix_epoch (gint64 secs);
|
||||
GstDateTime *gst_date_time_new_from_unix_epoch_local_time (gint64 secs);
|
||||
GstDateTime *gst_date_time_new_from_unix_epoch_utc (gint64 secs);
|
||||
GstDateTime *gst_date_time_new_local_time (gint year, gint month,
|
||||
gint day, gint hour,
|
||||
gint minute,
|
||||
|
|
|
@ -38,7 +38,11 @@ GST_START_TEST (test_GstDateTime_now)
|
|||
|
||||
memset (&tm, 0, sizeof (tm));
|
||||
t = time (NULL);
|
||||
#ifdef HAVE_LOCALTIME_R
|
||||
localtime_r (&t, &tm);
|
||||
#else
|
||||
memcpy (&tm, localtime (&t), sizeof (struct tm));
|
||||
#endif
|
||||
dt = gst_date_time_new_now_local_time ();
|
||||
assert_equals_int (gst_date_time_get_year (dt), 1900 + tm.tm_year);
|
||||
assert_equals_int (gst_date_time_get_month (dt), 1 + tm.tm_mon);
|
||||
|
@ -51,7 +55,7 @@ GST_START_TEST (test_GstDateTime_now)
|
|||
|
||||
GST_END_TEST;
|
||||
|
||||
GST_START_TEST (test_GstDateTime_new_from_unix_epoch)
|
||||
GST_START_TEST (test_GstDateTime_new_from_unix_epoch_local_time)
|
||||
{
|
||||
GstDateTime *dt;
|
||||
struct tm tm;
|
||||
|
@ -59,8 +63,12 @@ GST_START_TEST (test_GstDateTime_new_from_unix_epoch)
|
|||
|
||||
memset (&tm, 0, sizeof (tm));
|
||||
t = time (NULL);
|
||||
#ifdef HAVE_LOCALTIME_R
|
||||
localtime_r (&t, &tm);
|
||||
dt = gst_date_time_new_from_unix_epoch (t);
|
||||
#else
|
||||
memcpy (&tm, localtime (&t), sizeof (struct tm));
|
||||
#endif
|
||||
dt = gst_date_time_new_from_unix_epoch_local_time (t);
|
||||
assert_equals_int (gst_date_time_get_year (dt), 1900 + tm.tm_year);
|
||||
assert_equals_int (gst_date_time_get_month (dt), 1 + tm.tm_mon);
|
||||
assert_equals_int (gst_date_time_get_day (dt), tm.tm_mday);
|
||||
|
@ -77,7 +85,7 @@ GST_START_TEST (test_GstDateTime_new_from_unix_epoch)
|
|||
tm.tm_min = 0;
|
||||
tm.tm_sec = 0;
|
||||
t = mktime (&tm);
|
||||
dt = gst_date_time_new_from_unix_epoch (t);
|
||||
dt = gst_date_time_new_from_unix_epoch_local_time (t);
|
||||
assert_equals_int (gst_date_time_get_year (dt), 1970);
|
||||
assert_equals_int (gst_date_time_get_month (dt), 1);
|
||||
assert_equals_int (gst_date_time_get_day (dt), 1);
|
||||
|
@ -89,6 +97,33 @@ GST_START_TEST (test_GstDateTime_new_from_unix_epoch)
|
|||
|
||||
GST_END_TEST;
|
||||
|
||||
|
||||
GST_START_TEST (test_GstDateTime_new_from_unix_epoch_utc)
|
||||
{
|
||||
GstDateTime *dt;
|
||||
struct tm tm;
|
||||
time_t t;
|
||||
|
||||
memset (&tm, 0, sizeof (tm));
|
||||
t = time (NULL);
|
||||
#ifdef HAVE_GMTIME_R
|
||||
gmtime_r (&t, &tm);
|
||||
#else
|
||||
memcpy (&tm, gmtime (&t), sizeof (struct tm));
|
||||
#endif
|
||||
dt = gst_date_time_new_from_unix_epoch_utc (t);
|
||||
assert_equals_int (gst_date_time_get_year (dt), 1900 + tm.tm_year);
|
||||
assert_equals_int (gst_date_time_get_month (dt), 1 + tm.tm_mon);
|
||||
assert_equals_int (gst_date_time_get_day (dt), tm.tm_mday);
|
||||
assert_equals_int (gst_date_time_get_hour (dt), tm.tm_hour);
|
||||
assert_equals_int (gst_date_time_get_minute (dt), tm.tm_min);
|
||||
assert_equals_int (gst_date_time_get_second (dt), tm.tm_sec);
|
||||
assert_equals_int (gst_date_time_get_time_zone_offset (dt), 0);
|
||||
gst_date_time_unref (dt);
|
||||
}
|
||||
|
||||
GST_END_TEST;
|
||||
|
||||
GST_START_TEST (test_GstDateTime_get_dmy)
|
||||
{
|
||||
GstDateTime *dt;
|
||||
|
@ -96,8 +131,12 @@ GST_START_TEST (test_GstDateTime_get_dmy)
|
|||
struct tm tt;
|
||||
|
||||
t = time (NULL);
|
||||
#ifdef HAVE_LOCALTIME_R
|
||||
localtime_r (&t, &tt);
|
||||
dt = gst_date_time_new_from_unix_epoch (t);
|
||||
#else
|
||||
memcpy (&tt, localtime (&t), sizeof (struct tm));
|
||||
#endif
|
||||
dt = gst_date_time_new_from_unix_epoch_local_time (t);
|
||||
assert_equals_int (gst_date_time_get_year (dt), tt.tm_year + 1900);
|
||||
assert_equals_int (gst_date_time_get_month (dt), tt.tm_mon + 1);
|
||||
assert_equals_int (gst_date_time_get_day (dt), tt.tm_mday);
|
||||
|
@ -191,7 +230,11 @@ GST_START_TEST (test_GstDateTime_utc_now)
|
|||
struct tm tm;
|
||||
|
||||
t = time (NULL);
|
||||
#ifdef HAVE_GMTIME_R
|
||||
gmtime_r (&t, &tm);
|
||||
#else
|
||||
memcpy (&tm, gmtime (&t), sizeof (struct tm));
|
||||
#endif
|
||||
dt = gst_date_time_new_now_utc ();
|
||||
assert_equals_int (tm.tm_year + 1900, gst_date_time_get_year (dt));
|
||||
assert_equals_int (tm.tm_mon + 1, gst_date_time_get_month (dt));
|
||||
|
@ -213,7 +256,11 @@ GST_START_TEST (test_GstDateTime_get_utc_offset)
|
|||
|
||||
t = time (NULL);
|
||||
memset (&tm, 0, sizeof (tm));
|
||||
#ifdef HAVE_LOCALTIME_R
|
||||
localtime_r (&t, &tm);
|
||||
#else
|
||||
memcpy (&tm, localtime (&t), sizeof (struct tm));
|
||||
#endif
|
||||
|
||||
dt = gst_date_time_new_now_local_time ();
|
||||
ts = gst_date_time_get_time_zone_offset (dt);
|
||||
|
@ -236,7 +283,8 @@ gst_date_time_suite (void)
|
|||
tcase_add_test (tc_chain, test_GstDateTime_get_minute);
|
||||
tcase_add_test (tc_chain, test_GstDateTime_get_second);
|
||||
tcase_add_test (tc_chain, test_GstDateTime_get_utc_offset);
|
||||
tcase_add_test (tc_chain, test_GstDateTime_new_from_unix_epoch);
|
||||
tcase_add_test (tc_chain, test_GstDateTime_new_from_unix_epoch_local_time);
|
||||
tcase_add_test (tc_chain, test_GstDateTime_new_from_unix_epoch_utc);
|
||||
tcase_add_test (tc_chain, test_GstDateTime_new_full);
|
||||
tcase_add_test (tc_chain, test_GstDateTime_now);
|
||||
tcase_add_test (tc_chain, test_GstDateTime_utc_now);
|
||||
|
|
|
@ -239,7 +239,8 @@ EXPORTS
|
|||
gst_date_time_get_type
|
||||
gst_date_time_get_year
|
||||
gst_date_time_new
|
||||
gst_date_time_new_from_unix_epoch
|
||||
gst_date_time_new_from_unix_epoch_local_time
|
||||
gst_date_time_new_from_unix_epoch_utc
|
||||
gst_date_time_new_local_time
|
||||
gst_date_time_new_now_local_time
|
||||
gst_date_time_new_now_utc
|
||||
|
|
Loading…
Reference in a new issue