when_exe 0.3.7 → 0.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +210 -171
- data/bin/irb.rc +1 -0
- data/lib/when_exe.rb +78 -53
- data/lib/when_exe/basictypes.rb +27 -8
- data/lib/when_exe/calendarnote.rb +848 -805
- data/lib/when_exe/calendartypes.rb +110 -240
- data/lib/when_exe/coordinates.rb +2440 -2175
- data/lib/when_exe/core/compatibility.rb +1 -1
- data/lib/when_exe/core/duration.rb +13 -11
- data/lib/when_exe/core/extension.rb +38 -45
- data/lib/when_exe/ephemeris.rb +43 -14
- data/lib/when_exe/ephemeris/eclipse.rb +149 -0
- data/lib/when_exe/ephemeris/notes.rb +39 -7
- data/lib/when_exe/icalendar.rb +2 -6
- data/lib/when_exe/inspect.rb +1408 -1399
- data/lib/when_exe/parts/enumerator.rb +486 -477
- data/lib/when_exe/parts/resource.rb +1101 -1069
- data/lib/when_exe/parts/timezone.rb +6 -5
- data/lib/when_exe/region/babylonian.rb +405 -405
- data/lib/when_exe/region/bahai.rb +21 -61
- data/lib/when_exe/region/chinese/epochs.rb +81 -81
- data/lib/when_exe/region/chinese/twins.rb +51 -51
- data/lib/when_exe/region/christian.rb +7 -2
- data/lib/when_exe/region/coptic.rb +1 -1
- data/lib/when_exe/region/discordian.rb +9 -16
- data/lib/when_exe/region/french.rb +1 -1
- data/lib/when_exe/region/hanke_henry.rb +57 -0
- data/lib/when_exe/region/indian.rb +41 -73
- data/lib/when_exe/region/international_fixed.rb +97 -0
- data/lib/when_exe/region/iranian.rb +203 -203
- data/lib/when_exe/region/japanese.rb +13 -13
- data/lib/when_exe/region/japanese/eclipses.rb +1194 -0
- data/lib/when_exe/region/japanese/notes.rb +1482 -1383
- data/lib/when_exe/region/japanese/residues.rb +726 -721
- data/lib/when_exe/region/japanese/twins.rb +37 -37
- data/lib/when_exe/region/jewish.rb +2 -2
- data/lib/when_exe/region/pax.rb +60 -0
- data/lib/when_exe/region/positivist.rb +100 -0
- data/lib/when_exe/region/roman.rb +333 -334
- data/lib/when_exe/region/shire.rb +3 -20
- data/lib/when_exe/region/thai.rb +2 -2
- data/lib/when_exe/region/tibetan.rb +3 -3
- data/lib/when_exe/region/tranquility.rb +208 -0
- data/lib/when_exe/region/vanishing_leprechaun.rb +53 -0
- data/lib/when_exe/region/vietnamese.rb +4 -4
- data/lib/when_exe/region/world.rb +9 -13
- data/lib/when_exe/region/world_season.rb +89 -0
- data/lib/when_exe/region/zoroastrian.rb +4 -2
- data/lib/when_exe/tmobjects.rb +14 -4
- data/lib/when_exe/tmposition.rb +239 -81
- data/lib/when_exe/tmreference.rb +57 -28
- data/lib/when_exe/version.rb +1 -1
- data/link_to_online_documents +6 -3
- data/test/examples/today.rb +1 -1
- data/test/scripts.rb +23 -0
- data/test/scripts/2.ext.rb +169 -0
- data/test/scripts/2.rb +169 -0
- data/test/scripts/3.ext.rb +133 -0
- data/test/scripts/3.rb +134 -0
- data/test/scripts/4.ext.rb +112 -0
- data/test/scripts/4.min.rb +65 -0
- data/test/scripts/4.rb +136 -0
- data/test/scripts/5.ext.rb +78 -0
- data/test/scripts/5.rb +81 -0
- data/test/scripts/6.gcal.rb +131 -0
- data/test/scripts/6.rb +205 -0
- data/test/scripts/6.tz.rb +105 -0
- data/test/scripts/7.phase.rb +109 -0
- data/test/scripts/7.rb +95 -0
- data/test/scripts/7.term.rb +128 -0
- data/test/scripts/7.week.rb +84 -0
- data/test/scripts/8.ext.rb +61 -0
- data/test/scripts/8.rb +62 -0
- data/test/scripts/9.ext.rb +131 -0
- data/test/scripts/9.rb +130 -0
- data/test/scripts/chinese-luni-solar.rb +52 -0
- data/test/{examples → scripts}/geometric_complex.rb +41 -41
- data/test/scripts/geometric_complex.txt +18 -0
- data/test/scripts/korea.rb +59 -0
- data/test/scripts/thai-reviewed.txt +211 -0
- data/test/scripts/thai.rb +36 -0
- data/test/scripts/thai.txt +210 -0
- data/test/test.rb +7 -0
- data/test/test/basictypes.rb +22 -0
- data/test/test/coordinates.rb +2 -1
- data/test/test/ephemeris.rb +34 -2
- data/test/test/icalendar.rb +12 -0
- data/test/test/inspect.rb +37 -1
- data/test/test/parts.rb +4 -3
- data/test/test/region/armenian.rb +20 -0
- data/test/test/region/bahai.rb +58 -0
- data/test/test/region/chinese.rb +14 -3
- data/test/test/region/christian.rb +16 -35
- data/test/test/region/discordian.rb +20 -0
- data/test/test/region/indian.rb +30 -2
- data/test/test/region/japanese.rb +24 -0
- data/test/test/region/jewish.rb +2 -0
- data/test/test/region/m17n.rb +9 -0
- data/test/test/region/reforms.rb +121 -0
- data/test/test/region/residue.rb +17 -11
- data/test/test/region/shire.rb +58 -0
- data/test/test/region/swedish.rb +45 -0
- data/test/test/region/zoroastrian.rb +58 -0
- data/test/test/tmobjects.rb +74 -0
- data/test/test/tmposition.rb +468 -397
- data/when_exe.gemspec +2 -2
- metadata +49 -6
data/lib/when_exe/tmreference.rb
CHANGED
|
@@ -154,6 +154,19 @@ module When::TM
|
|
|
154
154
|
@time_basis ? @time_basis.time_standard.rate_of_clock : 1.0
|
|
155
155
|
end
|
|
156
156
|
|
|
157
|
+
# 西暦との年次の相違(外部表現の0年に対応する西暦年) - additional attribute
|
|
158
|
+
#
|
|
159
|
+
# @return [Numeric]
|
|
160
|
+
#
|
|
161
|
+
attr_reader :epoch_in_CE
|
|
162
|
+
|
|
163
|
+
# 西暦との年次の相違(内部表現の0年に対応する西暦年) - additional attribute
|
|
164
|
+
#
|
|
165
|
+
# @return [Numeric]
|
|
166
|
+
#
|
|
167
|
+
# @private
|
|
168
|
+
attr_reader :diff_to_CE
|
|
169
|
+
|
|
157
170
|
# 日付と時刻をユリウス日(When::TM::JulianDate)に変換する
|
|
158
171
|
#
|
|
159
172
|
# @param [When::TM::CalDate] cal_date
|
|
@@ -199,7 +212,7 @@ module When::TM
|
|
|
199
212
|
if clock
|
|
200
213
|
clock = When.Clock(clock) if clock.kind_of?(String)
|
|
201
214
|
clock = clock._daylight(jdt.universal_time) if clock._need_validate
|
|
202
|
-
frac = clock.universal_time
|
|
215
|
+
frac = clock.universal_time(jdt.to_i)
|
|
203
216
|
sdn, time = (jdt.universal_time - frac).divmod(Duration::DAY)
|
|
204
217
|
cal_options[:clock] = clock
|
|
205
218
|
cal_date = to_cal_date(sdn.to_i + JulianDate::JD19700101)
|
|
@@ -293,6 +306,15 @@ module When::TM
|
|
|
293
306
|
_default_index_of_MSC
|
|
294
307
|
_normalize_temporal
|
|
295
308
|
@reference_frame ||= []
|
|
309
|
+
@epoch_in_CE ||=
|
|
310
|
+
if @diff_to_CE
|
|
311
|
+
@diff_to_CE = @diff_to_CE.to_i
|
|
312
|
+
@diff_to_CE - @origin_of_MSC
|
|
313
|
+
else
|
|
314
|
+
0
|
|
315
|
+
end
|
|
316
|
+
@epoch_in_CE = @epoch_in_CE.to_i
|
|
317
|
+
@diff_to_CE = @epoch_in_CE + @origin_of_MSC
|
|
296
318
|
end
|
|
297
319
|
end
|
|
298
320
|
|
|
@@ -549,12 +571,14 @@ module When::TM
|
|
|
549
571
|
# この時法の時刻を128秒単位の実数に変換する
|
|
550
572
|
#
|
|
551
573
|
# @param [Array<Numeric>] clk_time
|
|
574
|
+
# @param [Integer] sdn 参照事象の通し番号(ダミー)
|
|
552
575
|
#
|
|
553
576
|
# @return [Numeric]
|
|
554
577
|
#
|
|
555
|
-
def to_universal_time(clk_time)
|
|
578
|
+
def to_universal_time(clk_time, sdn=nil)
|
|
556
579
|
return _coordinates_to_number(_decode(clk_time)) / @second
|
|
557
580
|
end
|
|
581
|
+
alias :to_local_time :to_universal_time
|
|
558
582
|
|
|
559
583
|
# 128秒単位の実数をこの時法の時刻に変換する
|
|
560
584
|
#
|
|
@@ -1417,33 +1441,35 @@ module When::TM
|
|
|
1417
1441
|
|
|
1418
1442
|
# dating_system
|
|
1419
1443
|
@dating_system = (@epoch.map {|e| e.frame}).compact.uniq
|
|
1420
|
-
ancestors = hierarchy.inject(['']) {|list,era|
|
|
1421
|
-
list << list[-1] + '::' + era.label.to_s
|
|
1422
|
-
list
|
|
1423
|
-
}
|
|
1424
1444
|
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
(epoch.length-1).times do |i|
|
|
1441
|
-
epoch[i].frame.synchronize {
|
|
1442
|
-
range = When::Parts::GeometricComplex.new([[epoch[i],true], [epoch[i+1],false]])
|
|
1445
|
+
unless @child && @child.length>0
|
|
1446
|
+
ancestors = hierarchy.inject(['']) {|list,era|
|
|
1447
|
+
list << list[-1] + '::' + era.label.to_s
|
|
1448
|
+
list
|
|
1449
|
+
}
|
|
1450
|
+
if @epoch.length == 1
|
|
1451
|
+
epoch[0].frame.synchronize {
|
|
1452
|
+
range = When::Parts::GeometricComplex.new([[epoch[0],true]])
|
|
1453
|
+
ancestors.each do |ancestor|
|
|
1454
|
+
epoch[0].frame.domain[ancestor] |= range
|
|
1455
|
+
end
|
|
1456
|
+
} if epoch[0].frame
|
|
1457
|
+
elsif reverse?
|
|
1458
|
+
epoch[1].frame.synchronize {
|
|
1459
|
+
range = When::Parts::GeometricComplex.new([[epoch[1],true]], true)
|
|
1443
1460
|
ancestors.each do |ancestor|
|
|
1444
|
-
epoch[
|
|
1461
|
+
epoch[1].frame.domain[ancestor] |= range
|
|
1445
1462
|
end
|
|
1446
|
-
} if epoch[
|
|
1463
|
+
} if epoch[1].frame
|
|
1464
|
+
else
|
|
1465
|
+
(epoch.length-1).times do |i|
|
|
1466
|
+
epoch[i].frame.synchronize {
|
|
1467
|
+
range = When::Parts::GeometricComplex.new([[epoch[i],true], [epoch[i+1],false]])
|
|
1468
|
+
ancestors.each do |ancestor|
|
|
1469
|
+
epoch[i].frame.domain[ancestor] |= range
|
|
1470
|
+
end
|
|
1471
|
+
} if epoch[i].frame
|
|
1472
|
+
end
|
|
1447
1473
|
end
|
|
1448
1474
|
end
|
|
1449
1475
|
|
|
@@ -1663,8 +1689,11 @@ module When::TM
|
|
|
1663
1689
|
end
|
|
1664
1690
|
frame = epoch.frame
|
|
1665
1691
|
cal_date = frame.to_cal_date(sdn)
|
|
1666
|
-
|
|
1667
|
-
return epoch,
|
|
1692
|
+
options = {:frame=>frame}
|
|
1693
|
+
return epoch, CalDate.new(cal_date, options) unless clock
|
|
1694
|
+
options[:clock] = clock
|
|
1695
|
+
options[:location] = date.location if date.location
|
|
1696
|
+
return epoch, DateAndTime.new(cal_date, time+frac, options)
|
|
1668
1697
|
end
|
|
1669
1698
|
|
|
1670
1699
|
# 代表的な元期
|
data/lib/when_exe/version.rb
CHANGED
data/link_to_online_documents
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
See online documents.
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
code: <https://github.com/suchowan/when_exe> (Please see README.md)
|
|
3
|
+
demo: <http://hosi.org> (Preferences - <http://hosi.org/cookies>)
|
|
4
|
+
gems: <https://rubygems.org/gems/when_exe>
|
|
5
|
+
yard: <http://rubydoc.info/gems/when_exe/frames>
|
|
6
|
+
wiki: <http://www2u.biglobe.ne.jp/~suchowan/when_exe_wiki.html>(Japanese and machine translated English)
|
|
7
|
+
blog: <http://suchowan.at.webry.info/theme/a543700674.html> (Japanese)
|
data/test/examples/today.rb
CHANGED
data/test/scripts.rb
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
=begin
|
|
4
|
+
Copyright (C) 2014 Takashi SUGA
|
|
5
|
+
|
|
6
|
+
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
|
7
|
+
=end
|
|
8
|
+
|
|
9
|
+
Dir.glob('scripts/*.rb') do |script|
|
|
10
|
+
next if script =~ /6/ # iCalendar
|
|
11
|
+
log = script.sub(/\.rb$/, '.txt')
|
|
12
|
+
if FileTest.exist?(log)
|
|
13
|
+
File.open(log, 'r') do |io|
|
|
14
|
+
puts '%s : %s' % [`ruby #{script}` == io.read ? '=' : 'x', log.sub(/^scripts\//, '')]
|
|
15
|
+
end
|
|
16
|
+
else
|
|
17
|
+
File.open(log, 'w') do |io|
|
|
18
|
+
io.write(`ruby #{script}`)
|
|
19
|
+
puts '%s : %s' % ['+', log.sub(/^scripts\//, '')]
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
=begin
|
|
3
|
+
Copyright (C) 2014 Takashi SUGA
|
|
4
|
+
|
|
5
|
+
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
|
6
|
+
=end
|
|
7
|
+
|
|
8
|
+
# Calendar/When/Ruby/2.APIの使用例/2.逆引き/コア拡張
|
|
9
|
+
|
|
10
|
+
# コアクラスを require 'when_exe/core/extension' で拡張した場合の記法を確認
|
|
11
|
+
|
|
12
|
+
# *準備
|
|
13
|
+
# when_exe Ruby 版の When モジュールを include する
|
|
14
|
+
require 'when_exe'
|
|
15
|
+
require 'when_exe/core/extension'
|
|
16
|
+
include When
|
|
17
|
+
|
|
18
|
+
# *日付
|
|
19
|
+
# **日付オブジェクトを作成する
|
|
20
|
+
date = [2013, 5,24].tm_pos
|
|
21
|
+
p date #=> 2013-05-24
|
|
22
|
+
|
|
23
|
+
# **日付オブジェクトを文字列に変換する
|
|
24
|
+
p date.to_s #=>"2013-05-24"
|
|
25
|
+
|
|
26
|
+
# **指定の日付が存在するかどうか調べる
|
|
27
|
+
p [2013, 2,29].tm_pos #=> 2013-03-01
|
|
28
|
+
p [2013, 2,29].tm_pos(:invalid=>:check) #=> nil
|
|
29
|
+
begin
|
|
30
|
+
p [2013, 2,29].tm_pos(:invalid=>:raise)
|
|
31
|
+
rescue => e
|
|
32
|
+
p e #=> ArgumentError: Specified date not found: [2013, 2, 29]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# **ユリウス日から日付オブジェクトを作成する
|
|
36
|
+
date = 2451941.tm_pos #=> 2001-01-31
|
|
37
|
+
p date #=> 2001-01-31
|
|
38
|
+
p date.to_i #=> 2451941
|
|
39
|
+
|
|
40
|
+
# **何日後、何日前の日付を求める
|
|
41
|
+
date = [2013, 1, 31].tm_pos
|
|
42
|
+
p date + P1D #=> 2013-02-01
|
|
43
|
+
p date + 1.day_period_duration #=> 2013-02-01
|
|
44
|
+
p date + 1 #=> 2013-02-01
|
|
45
|
+
p date.precision #=> 0
|
|
46
|
+
p date.succ #=> 2013-02-01
|
|
47
|
+
|
|
48
|
+
date = [2013, 2, 1].tm_pos
|
|
49
|
+
p date - P1D #=> 2013-01-31
|
|
50
|
+
p date - 1.day_period_duration #=> 2013-01-31
|
|
51
|
+
p date - 1 #=> 2013-01-31
|
|
52
|
+
p date.precision #=> 0
|
|
53
|
+
p date.prev #=> 2013-01-31
|
|
54
|
+
|
|
55
|
+
# 定数 P1D の値は &yard(When::TM::PeriodDuration,2).new(1, DAY) である
|
|
56
|
+
|
|
57
|
+
# 加減算で Integer は &yard(When::TM::PeriodDuration) に暗黙変換される
|
|
58
|
+
|
|
59
|
+
# **何ヶ月後、何ヶ月前の日付を求める
|
|
60
|
+
date = [2013, 1, 31].tm_pos
|
|
61
|
+
p date + P1M #=> 2013-02-28
|
|
62
|
+
p date + 1.month_period_duration #=> 2013-02-28
|
|
63
|
+
date = [2013, 1].tm_pos
|
|
64
|
+
p date.precision #=> -1
|
|
65
|
+
p date.succ #=> 2013-02
|
|
66
|
+
|
|
67
|
+
date = [2013, 3, 31].tm_pos
|
|
68
|
+
p date - P1M #=> 2013-02-28
|
|
69
|
+
p date - 1.month_period_duration #=> 2013-02-28
|
|
70
|
+
date = [2013, 2].tm_pos
|
|
71
|
+
p date.precision #=> -1
|
|
72
|
+
p date.prev #=> 2013-01
|
|
73
|
+
|
|
74
|
+
# 定数 P1M の値は &yard(When::TM::PeriodDuration).new(1, MONTH) である
|
|
75
|
+
|
|
76
|
+
# 日付の精度が“月”の場合、prev, succ は“月”単位で前後を求める
|
|
77
|
+
|
|
78
|
+
# **2つの日付の差を求める
|
|
79
|
+
date1 = [2012, 6,30].tm_pos
|
|
80
|
+
date2 = [2012, 7, 1].tm_pos
|
|
81
|
+
p date2 - date1 #=> P1D
|
|
82
|
+
p (date2 - date1).class #=> When::TM::PeriodDuration
|
|
83
|
+
|
|
84
|
+
# 精度が“日”または“日”よりも粗い日付の差は &yard(When::TM::PeriodDuration) になる
|
|
85
|
+
|
|
86
|
+
# **日付オブジェクトの年月日・曜日を個別に扱う
|
|
87
|
+
date = [2013, 5,24].tm_pos
|
|
88
|
+
p date #=> 2013-05-24
|
|
89
|
+
p date[YEAR] #=> 2013
|
|
90
|
+
p date[MONTH] #=> 5
|
|
91
|
+
p date[DAY] #=> 24
|
|
92
|
+
p date.year #=> 2013
|
|
93
|
+
p date.month #=> 5
|
|
94
|
+
p date.day #=> 24
|
|
95
|
+
p date.wday #=> 5
|
|
96
|
+
|
|
97
|
+
# **うるう年かどうか判定する
|
|
98
|
+
p date.length(YEAR) == 366 #=> false
|
|
99
|
+
|
|
100
|
+
# **文字列の日付を日付オブジェクトに変換する
|
|
101
|
+
p when?('2013-05-24') #=> 2013-05-24
|
|
102
|
+
|
|
103
|
+
# *日時
|
|
104
|
+
# **日時オブジェクトを生成する
|
|
105
|
+
time = [2013, 5,24, 6, 3, 10.5].tm_pos
|
|
106
|
+
p time #=> 2013-05-24T06:03:10.5Z
|
|
107
|
+
p time[YEAR] #=> 2013
|
|
108
|
+
p time[MONTH] #=> 5
|
|
109
|
+
p time[DAY] #=> 24
|
|
110
|
+
p time[HOUR] #=> 6
|
|
111
|
+
p time[MINUTE] #=> 3
|
|
112
|
+
p time[SECOND] #=> 10.5
|
|
113
|
+
p time.year #=> 2013
|
|
114
|
+
p time.month #=> 5
|
|
115
|
+
p time.day #=> 24
|
|
116
|
+
p time.hour #=> 6
|
|
117
|
+
p time.min #=> 3
|
|
118
|
+
p time.sec #=> 10.5
|
|
119
|
+
p time.wday #=> 5
|
|
120
|
+
|
|
121
|
+
# **日時中の曜日を日本語に変換する
|
|
122
|
+
p time.strftime('%A', 'ja') #=> "金曜日"
|
|
123
|
+
p ('Week'.residue % time).to_m17n/'ja' #=> "金曜日(4)"
|
|
124
|
+
|
|
125
|
+
# **UTCとローカル時刻の日時オブジェクト
|
|
126
|
+
utc = [2013, 5,24, 6, 3, 11].tm_pos
|
|
127
|
+
p utc #=> 2013-05-24T06:03:11Z
|
|
128
|
+
jst = [2013, 5,24, 6, 3, 11].tm_pos(:clock=>'+09:00')
|
|
129
|
+
p jst #=> 2013-05-24T06:03:11+09:00
|
|
130
|
+
|
|
131
|
+
# **日時オブジェクトを文字列に変換する
|
|
132
|
+
p jst.to_s #=> "2013-05-24T06:03:11+09:00"
|
|
133
|
+
|
|
134
|
+
# **日時を任意のフォーマットで扱う
|
|
135
|
+
p jst.strftime("Now, %A %B %d %X %Y", 'fr') #=> "Now, vendredi mai 24 06:03:11 2013"
|
|
136
|
+
|
|
137
|
+
# **日本時間をニューヨーク時間に変換する
|
|
138
|
+
if Object.const_defined?(:TZInfo) # TZInfo gem がインストールされていること
|
|
139
|
+
jst = [1997, 4, 6, 15, 30, 00].tm_pos(:tz=>'Asia/Tokyo')
|
|
140
|
+
p jst #=> 1997-04-06T15:30:00+09:00
|
|
141
|
+
est = 'America/New_York'.clock ^ jst
|
|
142
|
+
p est #=> 1997-04-06T01:30:00-05:00
|
|
143
|
+
jst = [1997, 4, 6, 16, 30, 00].tm_pos(:tz=>'Asia/Tokyo')
|
|
144
|
+
p jst #=> 1997-04-06T16:30:00+09:00
|
|
145
|
+
edt = 'America/New_York'.clock ^ jst
|
|
146
|
+
p edt #=> 1997-04-06T03:30:00-04:00
|
|
147
|
+
end
|
|
148
|
+
# 使用可能な時間帯の一覧は &yard(When::Parts::Timezone,2).tz_info.keys で取得できる
|
|
149
|
+
|
|
150
|
+
# **日時に任意の時間を加減する
|
|
151
|
+
utc = [2012, 6,30, 0, 0, 0].tm_pos
|
|
152
|
+
p utc #=> 2012-06-30T00:00:00Z
|
|
153
|
+
p utc + 1 #=> 2012-07-01T00:00:00Z
|
|
154
|
+
p utc + 1.0 #=> 2012-06-30T23:59:60Z
|
|
155
|
+
|
|
156
|
+
# 加減算で Integer は &yard(When::TM::PeriodDuration) に暗黙変換される
|
|
157
|
+
|
|
158
|
+
# 加減算で Float は &yard(When::TM::IntervalLength,2) に暗黙変換される
|
|
159
|
+
|
|
160
|
+
# **2つの日時の差を求める
|
|
161
|
+
utc1 = [2012, 6,30, 0, 0, 0].tm_pos
|
|
162
|
+
utc2 = [2012, 7, 1, 0, 0, 0].tm_pos
|
|
163
|
+
p utc2 - utc1 #=> 86401.0s
|
|
164
|
+
p (utc2 - utc1).class #=> When::TM::IntervalLength
|
|
165
|
+
|
|
166
|
+
# 精度が“日”よりも細かい日時の差は &yard(When::TM::IntervalLength) になる
|
|
167
|
+
|
|
168
|
+
# **UNIXタイムを日時オブジェクトに変換する
|
|
169
|
+
p when?(Time.at(1267867237)) #=> 2010-03-06T18:20:37.00+09:00
|
data/test/scripts/2.rb
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
=begin
|
|
3
|
+
Copyright (C) 2014 Takashi SUGA
|
|
4
|
+
|
|
5
|
+
You may use and/or modify this file according to the license described in the LICENSE.txt file included in this archive.
|
|
6
|
+
=end
|
|
7
|
+
|
|
8
|
+
# Calendar/When/Ruby/2.APIの使用例/2.逆引き
|
|
9
|
+
|
|
10
|
+
# [[逆引きRuby>http://www.namaraii.com/rubytips/?%C6%FC%C9%D5%A4%C8%BB%FE%B9%EF]]の例を When_exe Ruby 版ではどうするか? 下記に列挙する
|
|
11
|
+
|
|
12
|
+
# *準備
|
|
13
|
+
# when_exe Ruby 版の When モジュールを include する
|
|
14
|
+
require 'when_exe'
|
|
15
|
+
include When
|
|
16
|
+
|
|
17
|
+
# コア拡張を利用する場合は[[Calendar/When/Ruby/2.APIの使用例/2.逆引き/コア拡張]]を参照
|
|
18
|
+
|
|
19
|
+
# *日付
|
|
20
|
+
# **日付オブジェクトを作成する
|
|
21
|
+
date = tm_pos(2013, 5,24)
|
|
22
|
+
p date #=> 2013-05-24
|
|
23
|
+
|
|
24
|
+
# **日付オブジェクトを文字列に変換する
|
|
25
|
+
p date.to_s #=>"2013-05-24"
|
|
26
|
+
|
|
27
|
+
# **指定の日付が存在するかどうか調べる
|
|
28
|
+
p tm_pos(2013, 2, 29) #=> 2013-03-01
|
|
29
|
+
p tm_pos(2013, 2, 29, :invalid=>:check) #=> nil
|
|
30
|
+
begin
|
|
31
|
+
p tm_pos(2013, 2, 29, :invalid=>:raise)
|
|
32
|
+
rescue => e
|
|
33
|
+
p e #=> ArgumentError: Specified date not found: [2013, 2, 29]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# **ユリウス日から日付オブジェクトを作成する
|
|
37
|
+
date = Calendar('Gregorian').jul_trans(2451941)
|
|
38
|
+
p date #=> 2001-01-31
|
|
39
|
+
p date.to_i #=> 2451941
|
|
40
|
+
|
|
41
|
+
date = Gregorian ^ 2451941 # Gregorian は定数として定義済み、^ は jul_trans の alias
|
|
42
|
+
p date #=> 2001-01-31
|
|
43
|
+
p date.to_i #=> 2451941
|
|
44
|
+
|
|
45
|
+
# **何日後、何日前の日付を求める
|
|
46
|
+
date = tm_pos(2013, 1, 31)
|
|
47
|
+
p date + P1D #=> 2013-02-01
|
|
48
|
+
p date + 1 #=> 2013-02-01
|
|
49
|
+
p date.precision #=> 0
|
|
50
|
+
p date.succ #=> 2013-02-01
|
|
51
|
+
|
|
52
|
+
date = tm_pos(2013, 2, 1)
|
|
53
|
+
p date - 1 #=> 2013-01-31
|
|
54
|
+
p date - P1D #=> 2013-01-31
|
|
55
|
+
p date.precision #=> 0
|
|
56
|
+
p date.prev #=> 2013-01-31
|
|
57
|
+
|
|
58
|
+
# 定数 P1D の値は &yard(When::TM::PeriodDuration,2).new(1, DAY) である
|
|
59
|
+
|
|
60
|
+
# 加減算で Integer は &yard(When::TM::PeriodDuration) に暗黙変換される
|
|
61
|
+
|
|
62
|
+
# **何ヶ月後、何ヶ月前の日付を求める
|
|
63
|
+
date = tm_pos(2013, 1, 31)
|
|
64
|
+
p date + P1M #=> 2013-02-28
|
|
65
|
+
date = tm_pos(2013, 1)
|
|
66
|
+
p date.precision #=> -1
|
|
67
|
+
p date.succ #=> 2013-02
|
|
68
|
+
|
|
69
|
+
date = tm_pos(2013, 3, 31)
|
|
70
|
+
p date - P1M #=> 2013-02-28
|
|
71
|
+
date = tm_pos(2013, 2)
|
|
72
|
+
p date.precision #=> -1
|
|
73
|
+
p date.prev #=> 2013-01
|
|
74
|
+
|
|
75
|
+
# 定数 P1M の値は &yard(When::TM::PeriodDuration).new(1, MONTH) である
|
|
76
|
+
|
|
77
|
+
# 日付の精度が“月”の場合、prev, succ は“月”単位で前後を求める
|
|
78
|
+
|
|
79
|
+
# **2つの日付の差を求める
|
|
80
|
+
date1 = tm_pos(2012, 6,30)
|
|
81
|
+
date2 = tm_pos(2012, 7, 1)
|
|
82
|
+
p date2 - date1 #=> P1D
|
|
83
|
+
p (date2 - date1).class #=> When::TM::PeriodDuration
|
|
84
|
+
|
|
85
|
+
# 精度が“日”または“日”よりも粗い日付の差は &yard(When::TM::PeriodDuration) になる
|
|
86
|
+
|
|
87
|
+
# **日付オブジェクトの年月日・曜日を個別に扱う
|
|
88
|
+
date = tm_pos(2013, 5, 24)
|
|
89
|
+
p date #=> 2013-05-24
|
|
90
|
+
p date[YEAR] #=> 2013
|
|
91
|
+
p date[MONTH] #=> 5
|
|
92
|
+
p date[DAY] #=> 24
|
|
93
|
+
p date.year #=> 2013
|
|
94
|
+
p date.month #=> 5
|
|
95
|
+
p date.day #=> 24
|
|
96
|
+
p date.wday #=> 5
|
|
97
|
+
|
|
98
|
+
# **うるう年かどうか判定する
|
|
99
|
+
p date.length(YEAR) == 366 #=> false
|
|
100
|
+
|
|
101
|
+
# **文字列の日付を日付オブジェクトに変換する
|
|
102
|
+
p when?('2013-05-24') #=> 2013-05-24
|
|
103
|
+
|
|
104
|
+
# *日時
|
|
105
|
+
# **日時オブジェクトを生成する
|
|
106
|
+
time = tm_pos(2013, 5,24, 6, 3, 10.5)
|
|
107
|
+
p time #=> 2013-05-24T06:03:10.5Z
|
|
108
|
+
p time[YEAR] #=> 2013
|
|
109
|
+
p time[MONTH] #=> 5
|
|
110
|
+
p time[DAY] #=> 24
|
|
111
|
+
p time[HOUR] #=> 6
|
|
112
|
+
p time[MINUTE] #=> 3
|
|
113
|
+
p time[SECOND] #=> 10.5
|
|
114
|
+
p time.year #=> 2013
|
|
115
|
+
p time.month #=> 5
|
|
116
|
+
p time.day #=> 24
|
|
117
|
+
p time.hour #=> 6
|
|
118
|
+
p time.min #=> 3
|
|
119
|
+
p time.sec #=> 10.5
|
|
120
|
+
p time.wday #=> 5
|
|
121
|
+
|
|
122
|
+
# **日時中の曜日を日本語に変換する
|
|
123
|
+
p time.strftime('%A', 'ja') #=> "金曜日"
|
|
124
|
+
|
|
125
|
+
# **UTCとローカル時刻の日時オブジェクト
|
|
126
|
+
utc = tm_pos(2013, 5,24, 6, 3, 11)
|
|
127
|
+
p utc #=> 2013-05-24T06:03:11Z
|
|
128
|
+
jst = tm_pos(2013, 5,24, 6, 3, 11, :clock=>'+09:00')
|
|
129
|
+
p jst #=> 2013-05-24T06:03:11+09:00
|
|
130
|
+
|
|
131
|
+
# **日時オブジェクトを文字列に変換する
|
|
132
|
+
p jst.to_s #=> "2013-05-24T06:03:11+09:00"
|
|
133
|
+
|
|
134
|
+
# **日時を任意のフォーマットで扱う
|
|
135
|
+
p jst.strftime("Now, %A %B %d %X %Y", 'fr') #=> "Now, vendredi mai 24 06:03:11 2013"
|
|
136
|
+
|
|
137
|
+
# **日本時間をニューヨーク時間に変換する
|
|
138
|
+
if Object.const_defined?(:TZInfo) # TZInfo gem がインストールされていること
|
|
139
|
+
jst = tm_pos(1997, 4, 6, 15, 30, 00, :tz=>'Asia/Tokyo')
|
|
140
|
+
p jst #=> 1997-04-06T15:30:00+09:00
|
|
141
|
+
est = Clock('America/New_York') ^ jst
|
|
142
|
+
p est #=> 1997-04-06T01:30:00-05:00
|
|
143
|
+
jst = tm_pos(1997, 4, 6, 16, 30, 00, :tz=>'Asia/Tokyo')
|
|
144
|
+
p jst #=> 1997-04-06T16:30:00+09:00
|
|
145
|
+
edt = Clock('America/New_York') ^ jst
|
|
146
|
+
p edt #=> 1997-04-06T03:30:00-04:00
|
|
147
|
+
end
|
|
148
|
+
# 使用可能な時間帯の一覧は &yard(When::Parts::Timezone,2).tz_info.keys で取得できる
|
|
149
|
+
|
|
150
|
+
# **日時に任意の時間を加減する
|
|
151
|
+
utc = tm_pos(2012, 6,30, 0, 0, 0)
|
|
152
|
+
p utc #=> 2012-06-30T00:00:00Z
|
|
153
|
+
p utc + 1 #=> 2012-07-01T00:00:00Z
|
|
154
|
+
p utc + 1.0 #=> 2012-06-30T23:59:60Z
|
|
155
|
+
|
|
156
|
+
# 加減算で Integer は &yard(When::TM::PeriodDuration) に暗黙変換される
|
|
157
|
+
|
|
158
|
+
# 加減算で Float は &yard(When::TM::IntervalLength) に暗黙変換される
|
|
159
|
+
|
|
160
|
+
# **2つの日時の差を求める
|
|
161
|
+
utc1 = tm_pos(2012, 6,30, 0, 0, 0)
|
|
162
|
+
utc2 = tm_pos(2012, 7, 1, 0, 0, 0)
|
|
163
|
+
p utc2 - utc1 #=> 86401.0s
|
|
164
|
+
p (utc2 - utc1).class #=> When::TM::IntervalLength
|
|
165
|
+
|
|
166
|
+
# 精度が“日”よりも細かい日時の差は &yard(When::TM::IntervalLength,2) になる
|
|
167
|
+
|
|
168
|
+
# **UNIXタイムを日時オブジェクトに変換する
|
|
169
|
+
p when?(Time.at(1267867237)) #=> 2010-03-06T18:20:37.00+09:00
|