summaryrefslogtreecommitdiff
path: root/timev.rb
diff options
context:
space:
mode:
authorTanaka Akira <[email protected]>2024-06-02 10:17:36 +0900
committerTanaka Akira <[email protected]>2024-06-02 10:17:57 +0900
commitd03c61241a38cb16ed185d609af2d3dc69f66ba3 (patch)
tree233d4fdd60363ca6a911c2a7159fa5c83f64f263 /timev.rb
parent0cc5f77c07d964bb308e29ecb8e5b4ee81aa26d1 (diff)
Time internal representation described.
Diffstat (limited to 'timev.rb')
-rw-r--r--timev.rb36
1 files changed, 36 insertions, 0 deletions
diff --git a/timev.rb b/timev.rb
index 22f46b9729..a75f74d517 100644
--- a/timev.rb
+++ b/timev.rb
@@ -45,6 +45,42 @@
# (for example, by method Time.now)
# has the resolution supported by the system.
#
+# == \Time Internal Representation
+#
+# Time implementation uses a signed 63 bit integer, Integer(T_BIGNUM), or
+# Rational.
+# It is a number of nanoseconds since the _Epoch_.
+# The signed 63 bit integer can represent 1823-11-12 to 2116-02-20.
+# When Integer or Rational is used (before 1823, after 2116, under
+# nanosecond), Time works slower than when the signed 63 bit integer is used.
+#
+# Ruby uses the C function "localtime" and "gmtime" to map between the number
+# and 6-tuple (year,month,day,hour,minute,second).
+# "localtime" is used for local time and "gmtime" is used for UTC.
+#
+# Integer(T_BIGNUM) and Rational has no range limit,
+# but the localtime and gmtime has range limits
+# due to the C types "time_t" and "struct tm".
+# If that limit is exceeded, Ruby extrapolates the localtime function.
+#
+# "time_t" can represent 1901-12-14 to 2038-01-19 if it is 32 bit signed integer,
+# -292277022657-01-27 to 292277026596-12-05 if it is 64 bit signed integer.
+# However "localtime" on some platforms doesn't supports negative time_t (before 1970).
+#
+# "struct tm" has tm_year member to represent years.
+# (tm_year = 0 means the year 1900.)
+# It is defined as int in the C standard.
+# tm_year can represent between -2147481748 to 2147485547 if int is 32 bit.
+#
+# Ruby supports leap seconds as far as if the C function "localtime" and
+# "gmtime" supports it.
+# They use the tz database in most Unix systems.
+# The tz database has timezones which supports leap seconds.
+# For example, "Asia/Tokyo" doesn't support leap seconds but
+# "right/Asia/Tokyo" supports leap seconds.
+# So, Ruby supports leap seconds if the TZ environment variable is
+# set to "right/Asia/Tokyo" in most Unix systems.
+#
# == Examples
#
# All of these examples were done using the EST timezone which is GMT-5.