From: "NARUSE, Yui" Date: 2007-12-27T18:33:00+09:00 Subject: [ruby-dev:32823] class TimeSpan This is a multi-part message in MIME format. --------------050108060700040304090103 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit 成瀬です。 [ruby-list:44398] で DateTime に対する加算が話題になっていますが、現在の 方法は以下のような欠点があると思います。 * Rational を使う方法は直観的でない * 24*60 等マジックナンバーを頻繁に用いる必要がある * Time は秒、Date/DateTimeは日を基本単位としているため、  値を流用するとはまる > puts Time.now + 3600 2007-12-27 19:19:44 +0900 #1時間後 > puts DateTime.now + 3600 2017-11-04T18:11:58+09:00 #10年後! TimeSpan のようなクラスを追加すると以下のようになって誤解が少なくなるの ですが、いかがでしょうか。 > puts Time.now + TimeSpan(:days => 1) 2007-12-28 17:57:40 +0900 > puts Time.now + TimeSpan(:hours => 1) 2007-12-27 18:57:40 +0900 > puts DateTime.now + TimeSpan(:days => 1) 2007-12-28T17:57:40+09:00 > puts DateTime.now + TimeSpan(:hours => 1) 2007-12-27T18:57:40+09:00 -- NARUSE, Yui DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA --------------050108060700040304090103 Content-Type: text/plain; name="timespan.txt" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="timespan.txt" SW5kZXg6IGxpYi9kYXRlLnJiDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gbGliL2RhdGUucmIJKHJl dmlzaW9uIDE0NzMzKQ0KKysrIGxpYi9kYXRlLnJiCSh3b3JraW5nIGNvcHkpDQpAQCAtMTMw Myw2ICsxMzAzLDcgQEANCiAgICMgcGFydGljdWxhciwgdHdvIERhdGVzIGNhbm5vdCBiZSBh ZGRlZCB0byBlYWNoIG90aGVyLg0KICAgZGVmICsgKG4pDQogICAgIGNhc2Ugbg0KKyAgICB3 aGVuIFRpbWVTcGFuOyByZXR1cm4gbiArIHNlbGYNCiAgICAgd2hlbiBOdW1lcmljOyByZXR1 cm4gc2VsZi5jbGFzcy5uZXchKEBhamQgKyBuLCBAb2YsIEBzZykNCiAgICAgZW5kDQogICAg IHJhaXNlIFR5cGVFcnJvciwgJ2V4cGVjdGVkIG51bWVyaWMnDQpAQCAtMTMxOCw2ICsxMzE5 LDcgQEANCiAgICMgSWYgK3grIGlzIG5laXRoZXIgTnVtZXJpYyBub3IgYSBEYXRlLCBhIFR5 cGVFcnJvciBpcyByYWlzZWQuDQogICBkZWYgLSAoeCkNCiAgICAgY2FzZSB4DQorICAgIHdo ZW4gVGltZVNwYW47IHJldHVybiBuIC0gc2VsZg0KICAgICB3aGVuIE51bWVyaWM7IHJldHVy biBzZWxmLmNsYXNzLm5ldyEoQGFqZCAtIHgsIEBvZiwgQHNnKQ0KICAgICB3aGVuIERhdGU7 ICAgIHJldHVybiBAYWpkIC0geC5hamQNCiAgICAgZW5kDQpAQCAtMTc4MCwzICsxNzgyLDEy MiBAQA0KICAgcHVibGljX2NsYXNzX21ldGhvZCAgOm5vdw0KIA0KIGVuZA0KKw0KKw0KKyMN CisjID0gVGltZVNwYW4NCisjDQorIyA9PSBFeGFtcGxlcw0KKyMgDQorIyBUaW1lLm5vdyAr IFRpbWVTcGFuKDpkYXlzID0+IDEpDQorIyBUaW1lLm5vdyArIFRpbWVTcGFuKDpob3VycyA9 PiAxKQ0KKyMgVGltZS5ub3cgKyBUaW1lU3Bhbig6bWludXRlcyA9PiAxKQ0KKyMgRGF0ZVRp bWUubm93ICsgVGltZVNwYW4oOmRheXMgPT4gMSkNCisjIERhdGVUaW1lLm5vdyArIFRpbWVT cGFuKDpob3VycyA9PiAxKQ0KKyMgRGF0ZVRpbWUubm93ICsgVGltZVNwYW4oOm1pbnV0ZXMg PT4gMSkNCisjIA0KK2RlZiBUaW1lU3BhbigqYXJnKQ0KKyAgVGltZVNwYW4ubmV3KCphcmcp DQorZW5kDQorDQorY2xhc3MgVGltZVNwYW4NCisgICMNCisgICMgVGltZVNwYW4ubmV3KHNl Y29uZHMpDQorICAjIFRpbWVTcGFuLm5ldyhzZWNvbmRzLCBuYW5vc2Vjb25kcykNCisgICMg VGltZVNwYW4ubmV3KGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKQ0KKyAgIyBUaW1lU3Bhbi5u ZXcoZGF5cywgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpDQorICAjIFRpbWVTcGFuLm5ldyhk YXlzLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzZWNvbmRzKQ0KKyAgIw0KKyAg ZGVmIGluaXRpYWxpemUoKmFyZykNCisgICAgZGF5cyA9IDA7IGhvdXJzID0gMDsgbWludXRl cyA9IDA7IHNlY29uZHMgPSAwOyBtaWxsaXNlY29uZHMgPSAwDQorICAgIGNhc2UgYXJnLmxl bmd0aA0KKyAgICB3aGVuIDENCisgICAgICBhcmcgPSBhcmcuc2hpZnQNCisgICAgICBjYXNl IGFyZw0KKyAgICAgIHdoZW4gSGFzaA0KKwlkYXlzID0gYXJnWzpkYXlzXS50b19pIGlmIGFy Z1s6ZGF5c10NCisJaG91cnMgPSBhcmdbOmhvdXJzXS50b19pIGlmIGFyZ1s6aG91cnNdDQor CW1pbnV0ZXMgPSBhcmdbOm1pbnV0ZXNdLnRvX2kgaWYgYXJnWzptaW51dGVzXQ0KKwlzZWNv bmRzID0gYXJnWzpzZWNvbmRzXS50b19pIGlmIGFyZ1s6c2Vjb25kc10NCisJbWlsbGlzZWNv bmRzID0gYXJnWzptaWxsaXNlY29uZHNdLnRvX2kgaWYgYXJnWzptaWxsaXNlY29uZHNdDQor ICAgICAgZWxzZQ0KKwlzZWNvbmRzID0gYXJnDQorICAgICAgZW5kDQorICAgIHdoZW4gMg0K KyAgICAgIHNlY29uZHMsIG5hbm9zZWNvbmRzID0gYXJnDQorICAgIHdoZW4gMw0KKyAgICAg IGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzID0gYXJnDQorICAgIHdoZW4gNA0KKyAgICAgIGRh eXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzID0gYXJnDQorICAgIHdoZW4gNQ0KKyAgICAg IGRheXMsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtaWxsaXNlY29uZHMgPSBhcmcNCisg ICAgZWxzZQ0KKyAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IsICd3cm9uZyBudW1iZXIgb2Yg YXJndW1lbnRzKCVkKScgJSBhcmcubGVuZ3RoDQorICAgIGVuZA0KKyAgICBAbnNlYyA9ICgo KCgoZGF5cyAqIDI0ICsgaG91cnMpICogNjAgKyBtaW51dGVzKSAqIDYwICsgc2Vjb25kcykg KiAxMDAwICsgbWlsbGlzZWNvbmRzKSAqIDFfMDAwXzAwMCkudG9faSB1bmxlc3MgQG5zZWMN CisgICAgaWYgQG5zZWMgPj0gMA0KKyAgICAgIEBzaWduID0gMQ0KKyAgICBlbHNlDQorICAg ICAgQHNpZ24gPSAtMQ0KKyAgICAgIEBuc2VjID0gQG5zZWMuYWJzDQorICAgIGVuZA0KKyAg ZW5kDQorICANCisgIGRlZiBkYXlzDQorICAgIEBuc2VjIC8gODZfNDAwXzAwMF8wMDBfMDAw ICogQHNpZ24NCisgIGVuZA0KKw0KKyAgZGVmIGhvdXJzDQorICAgIChAbnNlYyAlIDg2XzQw MF8wMDBfMDAwXzAwMCkgLyAzXzYwMF8wMDBfMDAwXzAwMCAqIEBzaWduDQorICBlbmQNCisN CisgIGRlZiBtaW51dGVzDQorICAgIChAbnNlYyAlIDNfNjAwXzAwMF8wMDBfMDAwKSAvIDYw XzAwMF8wMDBfMDAwICogQHNpZ24NCisgIGVuZA0KKw0KKyAgZGVmIHNlY29uZHMNCisgICAg KEBuc2VjICUgNjBfMDAwXzAwMF8wMDApIC8gMV8wMDBfMDAwXzAwMCAqIEBzaWduDQorICBl bmQNCisNCisgIGRlZiBtaWxsaXNlY29uZHMNCisgICAgKEBuc2VjICUgMV8wMDBfMDAwXzAw MCkgLyAxXzAwMF8wMDAgKiBAc2lnbg0KKyAgZW5kDQorDQorICBkZWYgbWljcm9zZWNvbmRz DQorICAgIChAbnNlYyAlIDFfMDAwXzAwMCkgLyAxXzAwMCAqIEBzaWduDQorICBlbmQNCisN CisgIGRlZiBuYW5vc2Vjb25kcw0KKyAgICAoQG5zZWMgJSAxXzAwMCkgKiBAc2lnbg0KKyAg ZW5kDQorDQorICBkZWYgdG90YWxfc2Vjb25kcw0KKyAgICBSYXRpb25hbChAbnNlYyAqIEBz aWduLCAxXzAwMF8wMDBfMDAwKQ0KKyAgZW5kDQorDQorICBkZWYgdG90YWxfZGF5cw0KKyAg ICBSYXRpb25hbChAbnNlYyAqIEBzaWduLCA4Nl80MDBfMDAwXzAwMF8wMDApDQorICBlbmQN CisNCisgIGRlZiB0b19mDQorICAgIEBuc2VjICogQHNpZ24udG9fZiAvIDFfMDAwXzAwMF8w MDANCisgIGVuZA0KKw0KKyAgZGVmICsob3RoZXIpDQorICAgIGNhc2Ugb3RoZXINCisgICAg d2hlbiBUaW1lDQorICAgICAgcmV0dXJuIG90aGVyICsgdG90YWxfc2Vjb25kcw0KKyAgICB3 aGVuIERhdGUNCisgICAgICByZXR1cm4gb3RoZXIgKyB0b3RhbF9kYXlzDQorICAgIGVuZA0K KyAgZW5kDQorDQorICBkZWYgLShvdGhlcikNCisgICAgY2FzZSBvdGhlcg0KKyAgICB3aGVu IFRpbWUNCisgICAgICByZXR1cm4gb3RoZXIgLSB0b3RhbF9zZWNvbmRzDQorICAgIHdoZW4g RGF0ZQ0KKyAgICAgIHJldHVybiBvdGhlciAtIHRvdGFsX2RheXMNCisgICAgZW5kDQorICBl bmQNCitlbmQNCg== --------------050108060700040304090103--