私はRoRの初心者です。多くのことを試しましたが、ついに次のようになりました:
<td>
<%= Date.strptime(request.baseline_start_date, "%Y-%M-%D %H:%M:%S %Z").strftime("%M/%D/%Y")%>
</td>
しかし、これも私にエラーを与えています:
$_ value need to be String (nil given)
しかし、request.baseline_start_dateが価値を与えることは知っています(個別に印刷してみました)。与えられたnilとしてどれが言っているのか分かりません。
フォーマット変換を実現する方法に関する提案はありますか?
Railsでは、to_time
関数を文字列に対して実行して、Dateオブジェクトに変換します。
'2012-11-14 14:27:46'.to_time.strftime('%B %e at %l:%M %p')
#=> "November 14 at 2:27 PM"
便利でインタラクティブなリファレンスガイドについては、 http://www.foragoodstrftime.com/ を参照してください。
Date.strptime(
"2009-04-24 18:33:41 UTC",
"%Y-%m-%d %H:%M:%S %Z"
).strftime("%m/%d/%Y")
# => "04/24/2009"
たぶん、フォーマット文字列の大文字の使い方が間違っていると思います。
http://apidock.com/Rails/ActiveSupport/CoreExtensions/DateTime/Conversions/to_formatted_s でアクティブサポートのドキュメントと例を確認してください。
例
datetime = DateTime.civil(2007, 12, 4, 0, 0, 0, 0) # => Tue, 04 Dec 2007 00:00:00 +0000
datetime.to_formatted_s(:db) # => "2007-12-04 00:00:00"
datetime.to_s(:db) # => "2007-12-04 00:00:00"
datetime.to_s(:number) # => "20071204000000"
datetime.to_formatted_s(:short) # => "04 Dec 00:00"
datetime.to_formatted_s(:long) # => "December 04, 2007 00:00"
datetime.to_formatted_s(:long_ordinal) # => "December 4th, 2007 00:00"
datetime.to_formatted_s(:rfc822) # => "Tue, 04 Dec 2007 00:00:00 +0000"
または、本当にカスタマイズしたい場合は、次のようにヘルパーを定義します。
def custom_format(time)
Time::DATE_FORMATS[:w3cdtf] = lambda { |time| time.strftime("%Y-%m-%dT%H:%M:%S# {time.formatted_offset}") }
end
ActiveSupportのString#to_time(またはDate#to_time)関数を使用して、文字列をTime(またはDate)オブジェクトに変換できます。次に、すでに行っているようにstrftimeを使用します。
私はプロセス全体を簡素化し、日付のフォーマットをDRYにする本当に素晴らしい宝石を書きました。
それをチェックしてください: http://github.com/platform45/easy_dates
私が行ったことは、config/initializerにconversions.rbという名前のイニシャライザを追加することです。その後、次のような行を追加します。
ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.update(:<name> => '<formatting>')
そこからあなたはあなたのフォーマットを使ってあなたの日時をレンダリングすることができます:
dateVar.to_s(:<name>)
便利なリストがあります ここ 書式設定トークンの
返信ありがとうございます。私の問題は、出力がすでに文字列であるようで、文字列の日付から別の形式に変換する必要があることです。
データベース(Oracle)に保存されている日付を見るとmm/dd/yyですが、表示されると、タイムスタンプとタイムゾーンが追加されます。
Configuration\environment.rbのデフォルトをActiveSupport :: CoreExtensions :: Date :: Conversions :: DATE_FORMATS.merge!(:default => '%d%b%Y')として設定しようとしましたが、それもそうではないようです助けて。
最後に、タイムゾーン形式からmm/dd/yyyyに変換する文字列を取得するだけで十分です。