2

2011-05-21 04:20:46.0​​11のような日付をRailsのTimeオブジェクトに解析しようとしています。これまでのところ、私は次のものを持っています:

Time.strptime("2011-05-21 04:20:46.011", "%Y-%m-%d %H:%M:%S.%3N")

しかし、最後の「%3N」は気に入らないようです。この日付を解析するにはどうすればよいですか?

4

3 に答える 3

9

使用parse

x = Time.parse("2011-05-21 04:20:46.011", "%Y-%m-%d %H:%M:%S.%3N")
# => 2011-05-21 04:20:46 -0700
x.usec
# => 11000

多くの場合、次の形式で渡す必要はありません。

x = Time.parse("2011-05-21 04:20:46.011")
# => 2011-05-21 04:20:46 -0700
x.usec
# => 11000
于 2011-05-31T01:21:33.147 に答える
3

Time.parse( "2011-05-21 04:20:46.0​​11"、 "%Y-%m-%d%H:%M:%S。%3N")を試してください

于 2011-05-31T01:24:22.343 に答える
3

RailsコンソールでRubyv2.3.2およびRailsv5.0.0.1を使用

2.3.2 :035 > Time.parse("2011-05-21 04:20:46.011", "%Y-%m-%d %H:%M:%S.%3N")
NoMethodError: undefined method `getlocal' for "%Y-%m-%d %H:%M:%S.%3N":String
    from /home/jignesh/.rvm/rubies/ruby-2.3.2/lib/ruby/2.3.0/time.rb:264:in `make_time'
    from /home/jignesh/.rvm/rubies/ruby-2.3.2/lib/ruby/2.3.0/time.rb:366:in `parse'
    from (irb):35

%N注:以下の解析形式のコードでは、のように小数桁数のプレフィックスを付け%3Nず、代わりに単に指定する%Nと機能します

2.3.2 :037 > Time.strptime("2011-05-21 04:20:46.011", "%Y-%m-%d %H:%M:%S.%N")
 => 2011-05-21 04:20:46 +0530 
2.3.2 :038 > tt = Time.strptime("2011-05-21 04:20:46.011", "%Y-%m-%d %H:%M:%S.%N")
 => 2011-05-21 04:20:46 +0530 
2.3.2 :039 > tt.usec
 => 11000 

上記のコードは、使用時に機能しませんでしたparse

2.3.2 :040 > tt = Time.parse("2011-05-21 04:20:46.011", "%Y-%m-%d %H:%M:%S.%N")
NoMethodError: undefined method `getlocal' for "%Y-%m-%d %H:%M:%S.%N":String
    from /home/jignesh/.rvm/rubies/ruby-2.3.2/lib/ruby/2.3.0/time.rb:264:in `make_time'
    from /home/jignesh/.rvm/rubies/ruby-2.3.2/lib/ruby/2.3.0/time.rb:366:in `parse'
    from (irb):40

Time.strptime(date、format、now = self.now)の公式ドキュメントには、が記載されており、%3N明示的に解析形式で使用しても機能しないため、奇妙に見えます。%6N%9N

Railsは対応するstrptime(str、format、now = now())をAPIの一部として提供し、ソースコードに示されているようにActiveSupport::TimeZoneRubyの標準を使用して内部的に解析を行います。DateTime._strptime

# File activesupport/lib/active_support/values/time_zone.rb, line 382
def strptime(str, format, now=now())
  parts_to_time(DateTime._strptime(str, format), now)
end

そして、DateTime._strptimeは内部的にRubyの標準Time.strptimeに委任していると思います

Railsの対応するものを利用して特定の形式で解析することを探している人はTime.zone.parse、以下のコードを使用できます。

tt = Time.zone.strptime('1999-12-31 14:00:00.011111', '%Y-%m-%d %H:%M:%S.%N')
 => Fri, 31 Dec 1999 14:00:00 UTC +00:00 
2.3.2 :031 > tt.usec
 => 11111 

コアチームの誰かが観察されたこの動作について明確にできることを願っています。動作が正常である場合は、少なくともドキュメントに注意を払う必要があります。

于 2017-01-23T11:38:18.257 に答える