summaryrefslogtreecommitdiffhomepage
path: root/src/time.c
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-06-04 08:34:56 +0900
committerYukihiro Matsumoto <[email protected]>2012-06-04 08:34:56 +0900
commitab3c178a5f9742ff1fd6522c87b5cfd56e685e89 (patch)
tree17f5b1c6a1bcf47ef16bd1243a9304c7770520a2 /src/time.c
parent531124f0573e939d07d23ea0927483e0fb3954eb (diff)
downloadmruby-ab3c178a5f9742ff1fd6522c87b5cfd56e685e89.tar.gz
mruby-ab3c178a5f9742ff1fd6522c87b5cfd56e685e89.zip
add Time#getlocal/getgm/getutc
Diffstat (limited to 'src/time.c')
-rw-r--r--src/time.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/time.c b/src/time.c
index 08f746707..eea92e604 100644
--- a/src/time.c
+++ b/src/time.c
@@ -463,6 +463,39 @@ mrb_time_dstp(mrb_state *mrb, mrb_value self)
return mrb_bool_value(tm->datetime.tm_isdst);
}
+/* 15.2.19.7.8 */
+/* 15.2.19.7.10 */
+/* Returns the Time object of the UTC(GMT) timezone. */
+static mrb_value
+mrb_time_getutc(mrb_state *mrb, mrb_value self)
+{
+ struct mrb_time *tm, *tm2;
+
+ tm = mrb_get_datatype(mrb, self, &mrb_time_type);
+ if (!tm) return self;
+ tm2 = mrb_malloc(mrb, sizeof(*tm));
+ *tm2 = *tm;
+ tm2->timezone = MRB_TIMEZONE_UTC;
+ mrb_time_update_datetime(tm2);
+ return mrb_time_wrap(mrb, mrb_obj_class(mrb, self), tm2);
+}
+
+/* 15.2.19.7.9 */
+/* Returns the Time object of the LOCAL timezone. */
+static mrb_value
+mrb_time_getlocal(mrb_state *mrb, mrb_value self)
+{
+ struct mrb_time *tm, *tm2;
+
+ tm = mrb_get_datatype(mrb, self, &mrb_time_type);
+ if (!tm) return self;
+ tm2 = mrb_malloc(mrb, sizeof(*tm));
+ *tm2 = *tm;
+ tm2->timezone = MRB_TIMEZONE_LOCAL;
+ mrb_time_update_datetime(tm2);
+ return mrb_time_wrap(mrb, mrb_obj_class(mrb, self), tm2);
+}
+
/* 15.2.19.7.15 */
/* Returns hour of time. */
static mrb_value
@@ -671,6 +704,9 @@ mrb_init_time(mrb_state *mrb)
mrb_define_method(mrb, tc, "ctime" , mrb_time_asctime, ARGS_NONE()); /* 15.2.19.7.5 */
mrb_define_method(mrb, tc, "day" , mrb_time_day , ARGS_NONE()); /* 15.2.19.7.6 */
mrb_define_method(mrb, tc, "dst?" , mrb_time_dstp , ARGS_NONE()); /* 15.2.19.7.7 */
+ mrb_define_method(mrb, tc, "getgm" , mrb_time_getutc , ARGS_NONE()); /* 15.2.19.7.8 */
+ mrb_define_method(mrb, tc, "getlocal",mrb_time_getlocal,ARGS_NONE()); /* 15.2.19.7.9 */
+ mrb_define_method(mrb, tc, "getutc" , mrb_time_getutc , ARGS_NONE()); /* 15.2.19.7.10 */
mrb_define_method(mrb, tc, "gmt?" , mrb_time_utcp , ARGS_NONE()); /* 15.2.19.7.11 */
mrb_define_method(mrb, tc, "gmtime" , mrb_time_utc , ARGS_NONE()); /* 15.2.19.7.13 */
mrb_define_method(mrb, tc, "hour" , mrb_time_hour, ARGS_NONE()); /* 15.2.19.7.15 */