【问题标题】:ruby: Translate thai datetime string to datetime objectruby:将泰语日期时间字符串转换为日期时间对象
【发布时间】:2017-08-04 09:34:52
【问题描述】:

我想将这个泰语日期:"15 พ.ค. 2017 12:30" 解析为 DateTime 对象。我怎样才能做到这一点?

我发现用不同语言解析November

DateTime.parse "Novembre" => Wed, 01 Nov 2017 00:00:00 +0000

DateTime.parse "Noviembre" => Wed, 01 Nov 2017 00:00:00 +0000

DateTime.parse "พฤศจิกายน" => ArgumentError: invalid date

DateTime.parse "15 พฤศจิกายน 2017 12:30" => Wed, 15 Mar 2017 12:30:00 +0000

编辑: 我的发现是不正确的。 DateTime#parse 不翻译。请参阅下面 Iceman 的评论。

【问题讨论】:

  • 你有什么问题?
  • 如何将带有泰语月份名称的字符串转换为正确的日期时间对象?
  • 基本上,我不明白 i18n 是如何工作的。
  • 很可能只是没有实现对泰语月份名称的支持。但是,如果您知道名称 并且 格式是恒定的(您知道哪个数字表示什么),那么将字符串拆开并通过 Time.new 构建一个 Time 对象是微不足道的
  • 谢谢你,@SergioTulentsev。这是有道理的。我会试试你的建议。

标签: ruby-on-rails ruby datetime internationalization thai


【解决方案1】:

这个 Date 类的猴子补丁非常有用,解决了我的问题: https://gist.github.com/jackrg/2927162

添加这一行:

MONTH_TRANSLATIONS.merge! make_hash(%w/ม.ค. ก.พ. มี.ค. เม.ย. พ.ค. มิ.ย. ก.ค. ส.ค. ก.ย. ต.ค. พ.ย. ธ.ค./) # thai abbreviated

【讨论】:

    【解决方案2】:

    我认为泰语中的几个月开始形成的数字可能与世界上其他地方不同。所以你可以多加一个月:

    "15 เม.ย. 2017 12:30".to_datetime + 1.month
    

    【讨论】:

    • 不幸的是,事实并非如此。如果我尝试从泰语转换另一个月份,它仍然会返回一个带有 3 月(当前月份)的日期对象。 "15 พ.ค. 2017 12:30".to_datetime => Wed, 15 Mar 2017 12:30:00 +0000
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2022-01-26
    • 2015-09-17
    • 2014-12-13
    • 2012-03-15
    • 1970-01-01
    相关资源
    最近更新 更多