Ruby on rails 基于当前区域设置在Rails中显示小时格式(am/pm或非am/pm)

Ruby on rails 基于当前区域设置在Rails中显示小时格式(am/pm或非am/pm),ruby-on-rails,time,localization,Ruby On Rails,Time,Localization,我刚刚意识到Rails(目前为3.1.3)中的l(或localize)方法似乎无法根据当前设置的区域设置管理时钟格式。我只是假设情况是这样的,并没有专门为此进行测试。。。我刚刚验证了日期是根据区域设置重新格式化的 在我的rails控制台中,我得到了一个24小时时钟,用于执行以下所有操作。这两个区域设置之间唯一明显的区别是月份名称的大小写 I18n.l Time.now, :format => :short, :locale => :"en" I18n.l Time.now + 12

我刚刚意识到Rails(目前为3.1.3)中的l(或localize)方法似乎无法根据当前设置的区域设置管理时钟格式。我只是假设情况是这样的,并没有专门为此进行测试。。。我刚刚验证了日期是根据区域设置重新格式化的

在我的rails控制台中,我得到了一个24小时时钟,用于执行以下所有操作。这两个区域设置之间唯一明显的区别是月份名称的大小写

I18n.l Time.now, :format => :short,  :locale => :"en"
I18n.l Time.now + 12.hours, :format => :short,  :locale => :"en"
I18n.l Time.now, :format => :short,  :locale => :"sv-SE"
I18n.l Time.now + 12.hours, :format => :short,  :locale => :"sv-SE"
为什么呢? 这不是时间本地化的一部分吗

我发现AM/PM的唯一手动干预是生成表格选择,我可以“手动”要求12小时时钟。这是一个奇怪的选择,因为我觉得这正是我想要依靠的地方

看看Mac OS,我确实可以分别选择格式首选项的语言和区域设置,但这就是为什么我们有en-US、en-GB、sv-SE命名,对吗?表示语言国家。这将是完全可以为我添加一个en-SE文件到我的应用程序包含英语翻译格式适合在瑞典

我假设并不是所有的美国开发者都去编辑英语的默认语言环境文件(en-US看起来和en-btw一样),以获得适合美国用户的12小时时钟。所以,让我看看我有多笨吧。我完全希望这个问题肯定会成为一个非常基本的问题


简而言之。我做错了什么?我如何“修正”我的时间戳

如果您直接用
%I.%m%p
:%p表示指示器(“AM”或“PM”),%I表示12小时时钟(01..12)一天中的小时数,则可以获得12小时时钟


这在Rails 3.1中起作用。当然,您可以根据当前区域设置显示小时格式(am/pm或非am/pm),例如,如果您在不同的语言/区域设置文件中对其进行了不同的定义。请记住,如果使用
时间,则日期和时间格式之间存在差异。现在
则使用时间格式(如果使用日期值或将
类型转换为日期
,则使用日期格式)。瑞典文件
sv.yml
如下所示

sv:
  time:
    formats:
      default: "%H:%M"
en:
  time:
    formats:
      default: '%I.%m %p'
英语语言环境文件
en.yml
如下所示

sv:
  time:
    formats:
      default: "%H:%M"
en:
  time:
    formats:
      default: '%I.%m %p'
然后


谢谢,但我的问题更多的是何时显示12或24小时的时间。我的直觉告诉我,这应该是语言环境设置的一部分,但从我的测试来看,情况并非如此。我不能像你建议的那样,不写我自己的逻辑,决定是否要求12小时或24小时格式的变体。在sv SE区域设置上运行您的示例只打印01.12,因为默认区域设置文件将am和pm字符串设置为空。我不确定,但这可能更像是一个文化问题,而不是编程问题?您可以根据需要在I18n语言环境文件中定义时钟格式。12小时制只在说英语的地区使用,但我不知道哪种更常见,12小时制还是24小时制。我想这就是他的问题所在——不同的地区使用不同的时钟(12对24)。e、 我希望en-US使用12小时,de-de使用24小时。这不是应该像“%I.%M%p”这样吗?%m不是一个月吗?