Modified GsweTimestamp so the time zone must be specified as a double (in hours)
This commit is contained in:
parent
4f2c91d553
commit
7dc0a25d9d
@ -23,7 +23,7 @@ struct _GsweTimestampPrivate {
|
|||||||
gint gregorian_minute;
|
gint gregorian_minute;
|
||||||
gint gregorian_second;
|
gint gregorian_second;
|
||||||
gint gregorian_microsecond;
|
gint gregorian_microsecond;
|
||||||
GTimeZone *gregorian_timezone;
|
gdouble gregorian_timezone_offset;
|
||||||
|
|
||||||
gdouble julian_day;
|
gdouble julian_day;
|
||||||
};
|
};
|
||||||
@ -44,6 +44,7 @@ enum {
|
|||||||
PROP_GREGORIAN_MINUTE,
|
PROP_GREGORIAN_MINUTE,
|
||||||
PROP_GREGORIAN_SECOND,
|
PROP_GREGORIAN_SECOND,
|
||||||
PROP_GREGORIAN_MICROSECOND,
|
PROP_GREGORIAN_MICROSECOND,
|
||||||
|
PROP_GREGORIAN_TIMEZONE_OFFSET,
|
||||||
PROP_JULIAN_DAY_VALID
|
PROP_JULIAN_DAY_VALID
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -149,6 +150,13 @@ gswe_timestamp_class_init(GsweTimestampClass *klass)
|
|||||||
*/
|
*/
|
||||||
g_object_class_install_property(gobject_class, PROP_GREGORIAN_MICROSECOND, g_param_spec_int("gregorian-microsecond", "Gregorian microsecond", "The microsecond according to the Gregorian calendar", 0, G_MAXINT, g_date_time_get_microsecond(local_time), G_PARAM_READWRITE));
|
g_object_class_install_property(gobject_class, PROP_GREGORIAN_MICROSECOND, g_param_spec_int("gregorian-microsecond", "Gregorian microsecond", "The microsecond according to the Gregorian calendar", 0, G_MAXINT, g_date_time_get_microsecond(local_time), G_PARAM_READWRITE));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GsweTimestamp:gregorian-timezone-offset:
|
||||||
|
*
|
||||||
|
* The time zone offset in hours, relative to UTC
|
||||||
|
*/
|
||||||
|
g_object_class_install_property(gobject_class, PROP_GREGORIAN_TIMEZONE_OFFSET, g_param_spec_double("gregorian-timezone-offset", "Gregorian timezone offset", "The offset relative to UTC in the Gregorian calendar", -24.0, 24.0, 0.0, G_PARAM_READWRITE));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GsweTimestamp:julian-day-valid
|
* GsweTimestamp:julian-day-valid
|
||||||
*
|
*
|
||||||
@ -171,8 +179,6 @@ void
|
|||||||
gswe_timestamp_init(GsweTimestamp *self)
|
gswe_timestamp_init(GsweTimestamp *self)
|
||||||
{
|
{
|
||||||
self->priv = GSWE_TIMESTAMP_GET_PRIVATE(self);
|
self->priv = GSWE_TIMESTAMP_GET_PRIVATE(self);
|
||||||
|
|
||||||
self->priv->gregorian_timezone = g_time_zone_new_local();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -233,6 +239,11 @@ gswe_timestamp_set_property(GObject *object, guint prop_id, const GValue *value,
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_GREGORIAN_TIMEZONE_OFFSET:
|
||||||
|
gswe_timestamp_set_gregorian_timezone(timestamp, g_value_get_double(value));
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
||||||
|
|
||||||
@ -298,6 +309,11 @@ gswe_timestamp_get_property(GObject *object, guint prop_id, GValue *value, GPara
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PROP_GREGORIAN_TIMEZONE_OFFSET:
|
||||||
|
g_value_set_double(value, timestamp->priv->gregorian_timezone_offset);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
case PROP_JULIAN_DAY_VALID:
|
case PROP_JULIAN_DAY_VALID:
|
||||||
g_value_set_boolean(value, ((timestamp->priv->valid_dates & VALID_JULIAN_DAY) == VALID_JULIAN_DAY));
|
g_value_set_boolean(value, ((timestamp->priv->valid_dates & VALID_JULIAN_DAY) == VALID_JULIAN_DAY));
|
||||||
|
|
||||||
@ -499,6 +515,27 @@ gswe_timestamp_get_gregorian_microsecond(GsweTimestamp *timestamp)
|
|||||||
return timestamp->priv->gregorian_microsecond;
|
return timestamp->priv->gregorian_microsecond;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gswe_timestamp_set_gregorian_timezone(GsweTimestamp *timestamp, gdouble gregorian_timezone_offset)
|
||||||
|
{
|
||||||
|
timestamp->priv->gregorian_timezone_offset = gregorian_timezone_offset;
|
||||||
|
timestamp->priv->valid_dates = VALID_GREGORIAN;
|
||||||
|
|
||||||
|
if (timestamp->priv->instant_recalc == TRUE) {
|
||||||
|
gswe_timestamp_calculate_all(timestamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
gswe_timestamp_emit_changed(timestamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
gdouble
|
||||||
|
gswe_timestamp_get_gregorian_timezone(GsweTimestamp *timestamp)
|
||||||
|
{
|
||||||
|
gswe_timestamp_calculate_gregorian(timestamp);
|
||||||
|
|
||||||
|
return timestamp->priv->gregorian_timezone_offset;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gswe_timestamp_calculate_julian(GsweTimestamp *timestamp)
|
gswe_timestamp_calculate_julian(GsweTimestamp *timestamp)
|
||||||
{
|
{
|
||||||
@ -520,7 +557,8 @@ gswe_timestamp_calculate_julian(GsweTimestamp *timestamp)
|
|||||||
g_error("This timestamp object holds no valid values. This can't be good.");
|
g_error("This timestamp object holds no valid values. This can't be good.");
|
||||||
}
|
}
|
||||||
|
|
||||||
swe_utc_time_zone(timestamp->priv->gregorian_year, timestamp->priv->gregorian_month, timestamp->priv->gregorian_day, timestamp->priv->gregorian_hour, timestamp->priv->gregorian_minute, timestamp->priv->gregorian_second + timestamp->priv->gregorian_microsecond / 1000.0, g_time_zone_get_offset(timestamp->priv->gregorian_timezone, 0) / 3600.0, &utc_year, &utc_month, &utc_day, &utc_hour, &utc_minute, &utc_second);
|
swe_utc_time_zone(timestamp->priv->gregorian_year, timestamp->priv->gregorian_month, timestamp->priv->gregorian_day, timestamp->priv->gregorian_hour, timestamp->priv->gregorian_minute, timestamp->priv->gregorian_second + timestamp->priv->gregorian_microsecond / 1000.0, timestamp->priv->gregorian_timezone_offset, &utc_year, &utc_month, &utc_day, &utc_hour, &utc_minute, &utc_second);
|
||||||
|
|
||||||
if ((retval = swe_utc_to_jd(utc_year, utc_month, utc_day, utc_hour, utc_minute, utc_second, SE_GREG_CAL, dret, serr)) == ERR) {
|
if ((retval = swe_utc_to_jd(utc_year, utc_month, utc_day, utc_hour, utc_minute, utc_second, SE_GREG_CAL, dret, serr)) == ERR) {
|
||||||
g_error("Swiss Ephemeris error: %s", serr);
|
g_error("Swiss Ephemeris error: %s", serr);
|
||||||
} else {
|
} else {
|
||||||
@ -563,7 +601,7 @@ gswe_timestamp_new(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
GsweTimestamp *
|
GsweTimestamp *
|
||||||
gswe_timestamp_new_from_gregorian_full(gint year, gint month, gint day, gint hour, gint minute, gint second, gint microsecond, GTimeZone *time_zone)
|
gswe_timestamp_new_from_gregorian_full(gint year, gint month, gint day, gint hour, gint minute, gint second, gint microsecond, gdouble time_zone_offset)
|
||||||
{
|
{
|
||||||
GsweTimestamp *timestamp = GSWE_TIMESTAMP(g_object_new(GSWE_TYPE_TIMESTAMP,
|
GsweTimestamp *timestamp = GSWE_TIMESTAMP(g_object_new(GSWE_TYPE_TIMESTAMP,
|
||||||
"gregorian-year", year,
|
"gregorian-year", year,
|
||||||
@ -573,13 +611,9 @@ gswe_timestamp_new_from_gregorian_full(gint year, gint month, gint day, gint hou
|
|||||||
"gregorian-minute", minute,
|
"gregorian-minute", minute,
|
||||||
"gregorian-second", second,
|
"gregorian-second", second,
|
||||||
"gregorian-microsecond", microsecond,
|
"gregorian-microsecond", microsecond,
|
||||||
|
"gregorian-timezone-offset", time_zone_offset,
|
||||||
NULL));
|
NULL));
|
||||||
|
|
||||||
if (timestamp->priv->gregorian_timezone != NULL) {
|
|
||||||
g_time_zone_unref(timestamp->priv->gregorian_timezone);
|
|
||||||
}
|
|
||||||
|
|
||||||
timestamp->priv->gregorian_timezone = g_time_zone_ref(time_zone);
|
|
||||||
timestamp->priv->valid_dates = VALID_GREGORIAN;
|
timestamp->priv->valid_dates = VALID_GREGORIAN;
|
||||||
|
|
||||||
return timestamp;
|
return timestamp;
|
||||||
|
@ -45,7 +45,7 @@ GType gswe_timestamp_get_type(void);
|
|||||||
/* Method definitions */
|
/* Method definitions */
|
||||||
GsweTimestamp *gswe_timestamp_new(void);
|
GsweTimestamp *gswe_timestamp_new(void);
|
||||||
GsweTimestamp *gswe_timestamp_new_from_julian_day(gdouble julian_day);
|
GsweTimestamp *gswe_timestamp_new_from_julian_day(gdouble julian_day);
|
||||||
GsweTimestamp * gswe_timestamp_new_from_gregorian_full(gint year, gint month, gint day, gint hour, gint minute, gint second, gint microsecond, GTimeZone *time_zone);
|
GsweTimestamp * gswe_timestamp_new_from_gregorian_full(gint year, gint month, gint day, gint hour, gint minute, gint second, gint microsecond, gdouble time_zone_offset);
|
||||||
void gswe_timestamp_set_instant_recalc(GsweTimestamp *timestamp, gboolean instant_recalc);
|
void gswe_timestamp_set_instant_recalc(GsweTimestamp *timestamp, gboolean instant_recalc);
|
||||||
gboolean gswe_timestamp_get_instant_recalc(GsweTimestamp *timestamp);
|
gboolean gswe_timestamp_get_instant_recalc(GsweTimestamp *timestamp);
|
||||||
void gswe_timestamp_set_gregorian_year(GsweTimestamp *timestamp, gint gregorian_year);
|
void gswe_timestamp_set_gregorian_year(GsweTimestamp *timestamp, gint gregorian_year);
|
||||||
@ -62,6 +62,8 @@ void gswe_timestamp_set_gregorian_second(GsweTimestamp *timestamp, gint gregoria
|
|||||||
gint gswe_timestamp_get_gregorian_second(GsweTimestamp *timestamp);
|
gint gswe_timestamp_get_gregorian_second(GsweTimestamp *timestamp);
|
||||||
void gswe_timestamp_set_gregorian_microsecond(GsweTimestamp *timestamp, gint gregorian_microsecond);
|
void gswe_timestamp_set_gregorian_microsecond(GsweTimestamp *timestamp, gint gregorian_microsecond);
|
||||||
gint gswe_timestamp_get_gregorian_microsecond(GsweTimestamp *timestamp);
|
gint gswe_timestamp_get_gregorian_microsecond(GsweTimestamp *timestamp);
|
||||||
|
void gswe_timestamp_set_gregorian_timezone(GsweTimestamp *timestamp, gdouble gregorian_timezone_offset);
|
||||||
|
gdouble gswe_timestamp_get_gregorian_timezone(GsweTimestamp *timestamp);
|
||||||
void gswe_timestamp_set_julian_day(GsweTimestamp *timestamp, gdouble julian_day);
|
void gswe_timestamp_set_julian_day(GsweTimestamp *timestamp, gdouble julian_day);
|
||||||
gdouble gswe_timestamp_get_julian_day(GsweTimestamp *timestamp);
|
gdouble gswe_timestamp_get_julian_day(GsweTimestamp *timestamp);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user