6

私はサードパーティから一連の時間 (なんて詩的) を持っていますが、タイムゾーンがあるものとないものがあります。やりたいこと タイムゾーンが存在しない場合は追加します。

タイムゾーンを含む文字列の例を次に示します...

5:21 AM MT
10:01 PM MT
8:41 PM MT

しかしMT、何らかの理由でそれが欠落している場合があります。

だから、私がする必要があるのはMT、後AMまたはPM欠落している場合に追加することです。

(注意してください、単に をチェックすることはできませんMT。任意のタイムゾーンである可能性があります。ここでの主な目標は、AMまたはの後に選択した任意のタイムゾーンを追加できるようにすることPMです)。

4

7 に答える 7

8

私はこれらのどれも気に入らなかったのでchomp、存在する場合はそれを削除してから再度追加することにしました. あなたの場合:

"#{time.chomp(' MT')} MT"

編集: これは、OP が編集したユース ケース (多くの異なるタイム ゾーン) では実際には機能しませんが元のユース ケースと、Google からこれを見つけた可能性のある人々 (私のように!) の両方に役立ちます。

于 2017-02-17T11:19:41.677 に答える
2
>> s = 'foobar'

>> s.ends_with?('bar') ? s : "#{s}bar"

=> "foobar"

>> s = 'foo'

>> s.ends_with?('bar') ? s : "#{s}bar"

=> "foobar"
于 2016-08-26T23:55:19.963 に答える
2

AM/PM インジケーターが常に表示されている場合は、おそらく文字列の末尾を確認し、必要に応じて追加します。

if string.match(/\ (A|P)M$/)
  string << " #{timezone}"
end

そうでない場合 (つまり、24 時間)、DateまたはTimeパーサーを使用して文字列を解析し、文字列が適切なオブジェクトにキャストされたら、そのようにタイムゾーンを追加することをお勧めします。

于 2013-10-30T16:48:16.380 に答える
0

非正規表現ソリューション:

strings = ['5:21 AM MT', '8:41 PM MT',  '8:41 AM']
timezone = ' MT'
p strings.map{|time| time.end_with?('AM', 'PM') ? time+timezone : time}
#=> ["5:21 AM MT", "8:41 PM MT", "8:41 AM MT"]
于 2013-10-30T17:16:11.290 に答える
0

私のPerl時代からの借用:

str = '5:21 AM MT'
str # => "5:21 AM MT"
str[/[AP]M$/] # => nil
str[/[AP]M$/] && str << ' MT'
str # => "5:21 AM MT"

str = '5:21 AM'
str # => "5:21 AM"
str[/[AP]M$/] # => "AM"
str[/[AP]M$/] && str << ' MT'
str # => "5:21 AM MT"

いかがですか?str[/[AP]M$/] && str << ' MT'魔法のようなものです。str[/[AP]M$/]行の結果を見てください。

  • "AM"文字列がまたは"PM"で終わらない場合nilは が返されますが、これは Ruby では false であり、&&条件が短絡します。
  • "AM"文字列がorで終わる場合、Ruby は 2 番目の例のように一致する文字列を返し、 (and)"PM"をトリガーしてを追加します。&&' MT'
于 2013-10-30T23:31:24.790 に答える
-1
time_string.sub(/([AP]M){1}$/, '\1 MT')
于 2013-10-30T18:12:03.647 に答える