【问题标题】:Determine if a time value exists in date/time string确定日期/时间字符串中是否存在时间值
【发布时间】:2020-06-19 23:43:24
【问题描述】:

我正在寻找一种方法,它将接受一个字符串并给我

  1. 如果字符串中提供了时间值,则为日期时间值
  2. 如果字符串中仅提供日期,则为一天结束时的日期时间值

我可以使用[to_datetime][1] 转换字符串,但我看不到是否提供了时间值的方法,因为如果未提供值,返回的 DateTime 将初始化为 00:00:00 +0000

现在这是一个问题,因为to_datetime 在我解析输入时给了我一个默认值。

"1-1-2012".to_datetime            # => Sun, 01 Jan 2012 00:00:00 +0000
"01/01/2012 23:59:59".to_datetime # => Sun, 01 Jan 2012 23:59:59 +0000

我错过了什么吗?有没有更好的方法来转换输入,以便我知道是否提供了时间值?

【问题讨论】:

    标签: ruby-on-rails ruby date datetime time


    【解决方案1】:

    首先用正则表达式确定你是什么情况,然后我会加 1 天减去 1 秒。

    my_date_time = "1-1-2012".to_datetime + 1.days - 1.seconds
    

    【讨论】:

    • 对,但我不知道是提供了日期还是提供了日期时间。如果字符串中没有时间值,我只想去一天结束
    【解决方案2】:

    啊,想通了。我可以使用 _parse 来获取碎片:

    DateTime._parse(date_only)
    {:year=>2012, :mon=>1, :mday=>1}
    
    DateTime._parse(date_and_time)
    {:hour=>23, :min=>59, :sec=>59, :year=>2012, :mon=>1, :mday=>1}
    

    【讨论】:

      【解决方案3】:

      这可能对你有帮助:

      date = '10/10/2000'
      result = begin
                 DateTime.strptime(date, '%d/%m/%Y %H:%M:%S')
               rescue ArgumentError => e
                 DateTime.strptime(date, '%d/%m/%Y').at_end_of_day
               end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-14
        • 1970-01-01
        • 2015-04-05
        • 2016-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多