[#32498] Re: [ruby-cvs:21399] Ruby:r14162 (trunk): * parse.y (expr): redefinable not (!) operator. — SASADA Koichi <ko1@...>

 ささだです.

9 messages 2007/12/09

[#32512] Re: [ruby-cvs:21409] Ruby:r14172 (trunk): * transcode.c: new file to provide encoding conversion features. — Nobuyoshi Nakada <nobu@...>

なかだです。

33 messages 2007/12/10
[#32520] Re: [ruby-cvs:21409] Ruby:r14172 (trunk): * transcode.c: new file to provide encoding conversion features. — Martin Duerst <duerst@...> 2007/12/10

中田さん、こんにちは。

[#32527] Re: [ruby-cvs:21409] Ruby:r14172 (trunk): * transcode.c: new file to provide encoding conversion features. — Nobuyoshi Nakada <nobu@...> 2007/12/10

なかだです。

[#32535] Re: [ruby-cvs:21409] Ruby:r14172 (trunk): * transcode.c: new file to provide encoding conversion features. — Yukihiro Matsumoto <matz@...> 2007/12/11

まつもと ゆきひろです

[#32537] Re: [ruby-cvs:21409] Ruby:r14172 (trunk): * transcode.c: new file to provide encoding conversion features. — Martin Duerst <duerst@...> 2007/12/11

At 15:33 07/12/11, Yukihiro Matsumoto wrote:

[#32538] Re: [ruby-cvs:21409] Ruby:r14172 (trunk): * transcode.c: new file to provide encoding conversion features. — Yukihiro Matsumoto <matz@...> 2007/12/11

まつもと ゆきひろです

[#32539] Re: [ruby-cvs:21409] Ruby:r14172 (trunk): * transcode.c: new file to provide encoding conversion features. — Nobuyoshi Nakada <nobu@...> 2007/12/11

なかだです。

[#32550] Binary String — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

204 messages 2007/12/12
[#32551] Re: Binary String — Yukihiro Matsumoto <matz@...> 2007/12/12

まつもと ゆきひろです

[#32552] Re: Binary String — Hidetoshi NAGAI <nagai@...> 2007/12/12

永井@知能.九工大です.

[#32553] Re: Binary String — Yukihiro Matsumoto <matz@...> 2007/12/12

まつもと ゆきひろです

[#32560] Re: Binary String — Hidetoshi NAGAI <nagai@...> 2007/12/12

永井@知能.九工大です.

[#32561] Re: Binary String — Nobuyoshi Nakada <nobu@...> 2007/12/12

なかだです。

[#33018] Re: Binary String — Hidetoshi NAGAI <nagai@...> 2008/01/11

永井@知能.九工大です.

[#33019] Re: Binary String — Tanaka Akira <akr@...> 2008/01/11

In article <20080111.171950.78716471.nagai@ai.kyutech.ac.jp>,

[#33024] Re: Binary String — Hidetoshi NAGAI <nagai@...> 2008/01/11

永井@知能.九工大です.

[#33027] Re: Binary String — Tanaka Akira <akr@...> 2008/01/11

In article <20080111.184442.74744388.nagai@ai.kyutech.ac.jp>,

[#33041] Re: Binary String — Hidetoshi NAGAI <nagai@...> 2008/01/11

永井@知能.九工大です.

[#33047] Re: Binary String — Tanaka Akira <akr@...> 2008/01/11

In article <20080112.004750.74741782.nagai@ai.kyutech.ac.jp>,

[#33055] Re: Binary String — Hidetoshi NAGAI <nagai@...> 2008/01/12

永井@知能.九工大です.

[#33080] Re: Binary String — Tanaka Akira <akr@...> 2008/01/13

In article <20080112.100830.112615025.nagai@ai.kyutech.ac.jp>,

[#33104] Re: Binary String — Hidetoshi NAGAI <nagai@...> 2008/01/14

永井@知能.九工大です.

[#33108] Re: Binary String — "NARUSE, Yui" <naruse@...> 2008/01/15

成瀬です。

[#33121] Re: Binary String — Hidetoshi NAGAI <nagai@...> 2008/01/15

永井@知能.九工大です.

[#33123] Re: Binary String — "NARUSE, Yui" <naruse@...> 2008/01/15

成瀬です。

[#33127] Re: Binary String — Hidetoshi NAGAI <nagai@...> 2008/01/16

永井@知能.九工大です.

[#33138] Re: Binary String — "NARUSE, Yui" <naruse@...> 2008/01/16

成瀬です。

[#33147] Re: Binary String — Hidetoshi NAGAI <nagai@...> 2008/01/17

永井@知能.九工大です.

[#33152] Re: Binary String — "NARUSE, Yui" <naruse@...> 2008/01/17

成瀬です。

[#33153] Re: Binary String — 遊楽庵 <yu_raku_an@...> 2008/01/17

遊楽庵です。

[#33154] Re: Binary String — "NARUSE, Yui" <naruse@...> 2008/01/17

成瀬です。

[#33157] Re: Binary String — Yukihiro Matsumoto <matz@...> 2008/01/17

まつもと ゆきひろです

[#33330] Re: Binary String — "NARUSE, Yui" <naruse@...> 2008/01/23

成瀬です。

[#33336] Re: Binary String — Tanaka Akira <akr@...> 2008/01/23

In article <47975933.8010907@airemix.com>,

[#33337] Re: Binary String — Yukihiro Matsumoto <matz@...> 2008/01/23

まつもと ゆきひろです

[#33346] Re: Binary String — "U.Nakamura" <usa@...> 2008/01/24

こんにちは、なかむら(う)です。

[#33348] Re: Binary String — Yukihiro Matsumoto <matz@...> 2008/01/24

まつもと ゆきひろです

[#33352] Re: Binary String — "U.Nakamura" <usa@...> 2008/01/24

こんにちは、なかむら(う)です。

[#33353] Re: Binary String — Yukihiro Matsumoto <matz@...> 2008/01/24

まつもと ゆきひろです

[#33122] Re: Binary String — Tanaka Akira <akr@...> 2008/01/15

In article <20080115.024201.41653719.nagai@ai.kyutech.ac.jp>,

[#33126] Re: Binary String — Hidetoshi NAGAI <nagai@...> 2008/01/16

永井@知能.九工大です.

[#33151] Re: Binary String — Tanaka Akira <akr@...> 2008/01/17

In article <20080116.102057.41656941.nagai@ai.kyutech.ac.jp>,

[#33160] Re: Binary String — Hidetoshi NAGAI <nagai@...> 2008/01/17

永井@知能.九工大です.

[#33165] Re: Binary String — Tanaka Akira <akr@...> 2008/01/18

In article <20080117.233832.74721189.nagai@ai.kyutech.ac.jp>,

[#33188] Re: Binary String — Hidetoshi NAGAI <nagai@...> 2008/01/19

永井@知能.九工大です.

[#33193] Re: Binary String — Yukihiro Matsumoto <matz@...> 2008/01/19

まつもと ゆきひろです

[#33202] Re: Binary String — Hidetoshi NAGAI <nagai@...> 2008/01/19

永井@知能.九工大です.

[#33230] Re: Binary String — Yukihiro Matsumoto <matz@...> 2008/01/20

まつもと ゆきひろです

[#33236] Re: Binary String — Hidetoshi NAGAI <nagai@...> 2008/01/21

永井@知能.九工大です.

[#33238] Re: Binary String — SASADA Koichi <ko1@...> 2008/01/21

 m17n には近づかないようにしているささだです。

[#33241] Re: Binary String — "NARUSE, Yui" <naruse@...> 2008/01/21

成瀬です。

[#33248] Re: Binary String — Yukihiro Matsumoto <matz@...> 2008/01/21

まつもと ゆきひろです

[#33281] Re: Binary String — Hidetoshi NAGAI <nagai@...> 2008/01/22

永井@知能.九工大です.

[#33285] Re: Binary String — "NARUSE, Yui" <naruse@...> 2008/01/22

成瀬です。

[#33318] Re: Binary String — Hidetoshi NAGAI <nagai@...> 2008/01/23

永井@知能.九工大です.

[#33186] Ruby1.9 String バイト列へのインデックス アクセス — "Hisanori Kiryu" <hkiryu@...> 2008/01/19

長文失礼します。

[#33192] Re: Ruby1.9 String バイト列へのインデックス アクセス — Yukihiro Matsumoto <matz@...> 2008/01/19

まつもと ゆきひろです

[#33195] Re: Ruby1.9 String バイト列へのインデックス アクセス — rubikitch@... 2008/01/19

From: Yukihiro Matsumoto <matz@ruby-lang.org>

[#33199] Re: Ruby1.9 String バイト列へのインデックス アクセス — "NARUSE, Yui" <naruse@...> 2008/01/19

成瀬です。

[#33020] Re: Binary String — "NARUSE, Yui" <naruse@...> 2008/01/11

成瀬です。

[#32610] 1.9.1 issues left (as of 12/15) — Yukihiro Matsumoto <matz@...>

まつもと ゆきひろです

14 messages 2007/12/15

[#32715] issues left as of 12/25 2:00am JST — Yukihiro Matsumoto <matz@...>

まつもと ゆきひろです

41 messages 2007/12/24
[#32738] issues left as of 12/25 noon JST — Yukihiro Matsumoto <matz@...> 2007/12/25

まつもと ゆきひろです

[#32739] Re: issues left as of 12/25 noon JST — Yukihiro Matsumoto <matz@...> 2007/12/25

まつもと ゆきひろです

[#32791] Re: [ruby-list:44387] [ANN] Ruby 1.9.0 is released — SASADA Koichi <ko1@...>

 ささだです。

21 messages 2007/12/25

[#32823] class TimeSpan — "NARUSE, Yui" <naruse@...>

成瀬です。

18 messages 2007/12/27

[#32843] Windowでのデフォルトエンコーディング — KIMURA Koichi <kimura.koichi@...>

木村です。

30 messages 2007/12/28
[#32845] Re: Windowでのデフォルトエンコーディング — "U.Nakamura" <usa@...> 2007/12/28

こんにちは、なかむら(う)です。

[#32851] Re: Window でのデフォルトエンコーディング — Martin Duerst <duerst@...> 2007/12/28

At 13:55 07/12/28, U.Nakamura wrote:

[#32853] Re: Windowでのデフォルトエンコーディング — "NARUSE, Yui" <naruse@...> 2007/12/28

U.Nakamura wrote:

[#32857] Re: Windowでのデフォルトエンコーディング — "U.Nakamura" <usa@...> 2007/12/28

こんにちは、なかむら(う)です。

[#32852] Resolv::DNS#getaddresses doesn't return IPv6 address — "NARUSE, Yui" <naruse@...>

成瀬です。

17 messages 2007/12/28
[#32923] Re: Resolv::DNS#getaddresses doesn't return IPv6 address — Takahiro Kambe <taca@...> 2008/01/05

こんにちは。

[#32924] Re: Resolv::DNS#getaddresses doesn't return IPv6 address — "NARUSE, Yui" <naruse@...> 2008/01/05

成瀬です。

[#32925] Re: Resolv::DNS#getaddresses doesn't return IPv6 address — Takahiro Kambe <taca@...> 2008/01/05

In message <477EF0C9.4060103@airemix.com>

[#32929] Re: Resolv::DNS#getaddresses doesn't return IPv6 address — "NARUSE, Yui" <naruse@...> 2008/01/05

成瀬です

[ruby-dev:32823] class TimeSpan

From: "NARUSE, Yui" <naruse@...>
Date: 2007-12-27 09:33:00 UTC
List: ruby-dev #32823
成瀬です。

[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  <naruse@airemix.com>
DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA

Attachments (1)

timespan.txt (3.38 KB, text/x-diff)
Index: lib/date.rb
===================================================================
--- lib/date.rb	(revision 14733)
+++ lib/date.rb	(working copy)
@@ -1303,6 +1303,7 @@
   # particular, two Dates cannot be added to each other.
   def + (n)
     case n
+    when TimeSpan; return n + self
     when Numeric; return self.class.new!(@ajd + n, @of, @sg)
     end
     raise TypeError, 'expected numeric'
@@ -1318,6 +1319,7 @@
   # If +x+ is neither Numeric nor a Date, a TypeError is raised.
   def - (x)
     case x
+    when TimeSpan; return n - self
     when Numeric; return self.class.new!(@ajd - x, @of, @sg)
     when Date;    return @ajd - x.ajd
     end
@@ -1780,3 +1782,122 @@
   public_class_method  :now
 
 end
+
+
+#
+# = TimeSpan
+#
+# == Examples
+# 
+# Time.now + TimeSpan(:days => 1)
+# Time.now + TimeSpan(:hours => 1)
+# Time.now + TimeSpan(:minutes => 1)
+# DateTime.now + TimeSpan(:days => 1)
+# DateTime.now + TimeSpan(:hours => 1)
+# DateTime.now + TimeSpan(:minutes => 1)
+# 
+def TimeSpan(*arg)
+  TimeSpan.new(*arg)
+end
+
+class TimeSpan
+  #
+  # TimeSpan.new(seconds)
+  # TimeSpan.new(seconds, nanoseconds)
+  # TimeSpan.new(hours, minutes, seconds)
+  # TimeSpan.new(days, hours, minutes, seconds)
+  # TimeSpan.new(days, hours, minutes, seconds, milliseconds)
+  #
+  def initialize(*arg)
+    days = 0; hours = 0; minutes = 0; seconds = 0; milliseconds = 0
+    case arg.length
+    when 1
+      arg = arg.shift
+      case arg
+      when Hash
+	days = arg[:days].to_i if arg[:days]
+	hours = arg[:hours].to_i if arg[:hours]
+	minutes = arg[:minutes].to_i if arg[:minutes]
+	seconds = arg[:seconds].to_i if arg[:seconds]
+	milliseconds = arg[:milliseconds].to_i if arg[:milliseconds]
+      else
+	seconds = arg
+      end
+    when 2
+      seconds, nanoseconds = arg
+    when 3
+      hours, minutes, seconds = arg
+    when 4
+      days, hours, minutes, seconds = arg
+    when 5
+      days, hours, minutes, seconds, milliseconds = arg
+    else
+      raise ArgumentError, 'wrong number of arguments(%d)' % arg.length
+    end
+    @nsec = (((((days * 24 + hours) * 60 + minutes) * 60 + seconds) * 1000 + milliseconds) * 1_000_000).to_i unless @nsec
+    if @nsec >= 0
+      @sign = 1
+    else
+      @sign = -1
+      @nsec = @nsec.abs
+    end
+  end
+  
+  def days
+    @nsec / 86_400_000_000_000 * @sign
+  end
+
+  def hours
+    (@nsec % 86_400_000_000_000) / 3_600_000_000_000 * @sign
+  end
+
+  def minutes
+    (@nsec % 3_600_000_000_000) / 60_000_000_000 * @sign
+  end
+
+  def seconds
+    (@nsec % 60_000_000_000) / 1_000_000_000 * @sign
+  end
+
+  def milliseconds
+    (@nsec % 1_000_000_000) / 1_000_000 * @sign
+  end
+
+  def microseconds
+    (@nsec % 1_000_000) / 1_000 * @sign
+  end
+
+  def nanoseconds
+    (@nsec % 1_000) * @sign
+  end
+
+  def total_seconds
+    Rational(@nsec * @sign, 1_000_000_000)
+  end
+
+  def total_days
+    Rational(@nsec * @sign, 86_400_000_000_000)
+  end
+
+  def to_f
+    @nsec * @sign.to_f / 1_000_000_000
+  end
+
+  def +(other)
+    case other
+    when Time
+      return other + total_seconds
+    when Date
+      return other + total_days
+    end
+  end
+
+  def -(other)
+    case other
+    when Time
+      return other - total_seconds
+    when Date
+      return other - total_days
+    end
+  end
+end

In This Thread

Prev Next