2

何が間違っているのかわかりません。私は数多くの例に従ってきましたが、これをうまく機能させることはできません。次の時間の文字列があります。

text_t = 東部標準時の午後 1:00

次のコードを使用して、値に 30 分を簡単に追加できるように、DateTime オブジェクトに変換しようとしています。

  text_next = DateTime.strptime(text_t, '%I:%M %p %Z')
  puts text_next
  text_next = text_next + 1800
  puts text_next

しかし、私の出力は次のようになります。

1:00 PM ET
2013-07-02T13:00:00+00:00
2018-06-06T13:00:00+00:00

時間を 30 分ずつ増やしてから、convert を元と同じ形式の文字列に戻す必要があります。文字列を操作して 30 分先にする関数を作成することもできますが、それは大変な作業だと思います。この機能を提供するものでなければなりません。

4

3 に答える 3

0

これが私が従うアプローチです:

require 'date'

text_t = '2:12:03 PM ET'
dt = DateTime.parse(text_t, '%I:%M %p %Z')
# => #<DateTime: 2013-07-03T14:12:03+00:00 ((2456477j,51123s,0n),+0s,2299161j)>
dt.to_s
# => "2013-07-03T14:12:03+00:00" # !> invalid offset is ignored
dh = Date._strptime(dt.to_s,'%Y-%m-%dT%H:%M:%S%z')
# => {:year=>2013,
#     :mon=>7,
#     :mday=>3,
#     :hour=>14,
#     :min=>12,
#     :sec=>3,
#     :zone=>"+00:00",
#     :offset=>0}

dh[:hour] += 30 # => 44
dh
# => {:year=>2013,
#     :mon=>7,
#     :mday=>3,
#     :hour=>44,
#     :min=>12,
#     :sec=>3,
#     :zone=>"+00:00",
#     :offset=>0}

dh.values[0..-2].join(" ")
# => "2013 7 3 44 12 3 +00:00"
DateTime.ordinal(*dh.values[0..-3])
# => #<DateTime: 2013-01-07T03:44:12+00:00 ((2456300j,13452s,0n),+0s,2299161j)>

これで、オブジェクトをどのように表示するかを選択できDateます。

于 2013-07-02T19:42:13.860 に答える