Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 红宝石;字符串是否可以解析为“2016-12-01”是一天,“2016-12-01T12:05”是一分钟?_Ruby_Parsing_Datetime - Fatal编程技术网

Ruby 红宝石;字符串是否可以解析为“2016-12-01”是一天,“2016-12-01T12:05”是一分钟?

Ruby 红宝石;字符串是否可以解析为“2016-12-01”是一天,“2016-12-01T12:05”是一分钟?,ruby,parsing,datetime,Ruby,Parsing,Datetime,使用香草Ruby(或Rails,但更喜欢香草Ruby) 假设自定义类由我们创建:年,月,日,小时,分钟,秒,毫秒 在这些课程中,它们与特定的小时、分钟、秒等相关 示例:thisMinute=Minute.new(“2016-12-01T12:05”)=>2016年第12个月第1天第12小时第5分钟 是否可以创建一个函数,以便 foo(“2016”)可以创建Year类的实例 foo(“2016/12”)可以创建Month类的实例 foo(“2016-12-01”)可以创建Day类的实例 foo(

使用香草Ruby(或Rails,但更喜欢香草Ruby)

假设自定义类由我们创建:
小时
分钟
毫秒
在这些课程中,它们与特定的小时、分钟、秒等相关

示例:
thisMinute=Minute.new(“2016-12-01T12:05”)=>2016年第12个月第1天第12小时第5分钟


是否可以创建一个函数,以便
foo(“2016”)
可以创建
Year
类的实例

foo(“2016/12”)
可以创建
Month
类的实例

foo(“2016-12-01”)
可以创建
Day
类的实例

foo(“2016-12-01T12:05”)
可以创建
Minute
类的实例

等等

这是陷阱
  • 时间格式可能会有所不同(
    “20161201”
    )20161201@12pm“
    例如)

  • 使用这些格式,
    Time.parse
    将成功解析字符串,但将设置
    小时
    ,以便
    “20161201”
    将设置小时值,即使它应该是

  • 检查
    ==0
    (如
    Time.parse().hour==0
    )将失败,因为时间可能是2016-12-01@12am“


    一种可能的方法是为每个类使用一个解析方法。stftime用于提取时间戳的特定部分

    a = '2016-12-01T12:05'
    => "2016-12-01T12:05"
    b = DateTime.parse(a)
    => #<DateTime: 2016-12-01T12:05:00+00:00 ((2457724j,43500s,0n),+0s,2299161j)>
    b.strftime("%M") # minute
    => "05"
    b.strftime("%H") # hour
    => "12"
    b.strftime("%d") # day of month
    => "01"
    b.strftime("%m") # month
    => "12"
    
    a='2016-12-01T12:05'
    =>“2016-12-01T12:05”
    b=DateTime.parse(a)
    => #
    b、 strftime(“%M”)#分钟
    => "05"
    b、 标准时间(“%H”)#小时
    => "12"
    b、 strftime(“%d”)#月日
    => "01"
    b、 strftime(“%m”)#月
    => "12"
    
    因此,每个类都将使用不同的stfrtime()参数来筛选您需要的时间戳的任何部分


    你在说什么
    分钟
    课?这是你建造的吗?你当然可以做到,但很难想象它能解决什么问题。你能告诉我们更多关于你试图用这个来解决的问题吗?@tadman-是的,我们已经做了一些事情constructed@Jordan-在注释中解释有点复杂,但我们在图形数据库中有一个UTC时间树,事件连接到树上的节点。唯一的“键”是节点的名称(字符串):
    (20161201\u 12)-[:ZOOM\u OUT]->(20161201)
    。事件节点被添加到树中,如
    (Event)-[:occurrent\u AT]->(20161201)
    。一个事件可以发生在任何级别(例如,不知道什么时候发生了什么,只知道当天发生的事件),因此一天发生的事件不能连接到第二个
    20161201_u000000
    ,而应该连接到day节点。我使用了这样的时间实现。看看吧:值得一提的是,虽然这些方法有效,
    b.minute
    b.day
    等等可能更简洁。如果您可以使用
    .minute
    .hour
    等。。。使用它们。strftime将为您提供更多可定制的时间戳组合,以满足您的需求。ex->
    b.strftime(“%d,%H:%M”)=>“01,12:05”
    噢,当然,这两个选项都有效,具体取决于您的要求。只是不要做b.strftime(“%M”)。我想这可能行得通,但这只是解决方案的一半。你有没有一个解决方案来确定用哪个类进行解析?我不太确定那一半是什么。我会以你上面的minute.new为例,在一个minute类中解析分钟数