【问题标题】:How to get a formatted date and time string from `now`?如何从`now`获取格式化的日期和时间字符串?
【发布时间】:2019-06-09 04:54:36
【问题描述】:

我在 Windows 上使用“红色编程语言”版本“0.6.4”并制作命令行应用程序。

我不太懂红色语言,也不懂很多东西。在问这里之前,我确实在 (https://doc.red-lang.org/en/) 上查看了“正在进行的工作”文档。

我需要获取格式为yyyymmdd_hhmm 的日期和时间字符串。

我从这样的代码开始:

Red []
dt: to string! now/year
print dt

这给了我2019,但我需要其他东西月、日和时间来获得类似20190608_2146的东西

我也试过了:

Red []
dt: to string! now/precise
print dt

这给了我8-Jun-2019/21:47:51.299-07:00,但我需要的是20190608_2147

问题:
如何修改上面的代码,从now获取20190608_2147之类的东西?

谢谢。

【问题讨论】:

    标签: rebol red


    【解决方案1】:

    我为 Rebol 和 Red 编写了一个名为“Form Date”的脚本,它将以与 STRFTIME 类似的方式格式化日期/时间。红色版本是here

    do %form-date.red
    probe form-date now "%Y%m%d_%H%M"
    
    print first spec-of :form-date
    

    脚本中有单独的 sn-ps 代码,用于格式化日期的各个组成部分!价值。

    虽然您不需要特定示例的脚本,但您可以提取并加入各种组件:

    date: now
    rejoin [ ; reduce-join
        form date/year
        pad/left/with date/month 2 #"0"
        pad/left/with date/day 2 #"0"
        "_"
        pad/left/with date/hour 2 #"0"
        pad/left/with date/minute 2 #"0"
    ]
    

    【讨论】:

      【解决方案2】:

      由于上述解决方案在 Rebol2 下存在一些问题,这里的变体与 Rebol 和 Red 的工作方式相同

      date: now
      rejoin [ 
          date/year
          next form 100 + date/month
          next form 100 + date/day 
          "_"
          next form 100 + date/time/hour
          next form 100 + date/time/minute 
      ]
      

      【讨论】:

        【解决方案3】:

        这是另一种方式:

        rejoin [
            now/year 
            either 10 > x: (now/month) [join "0" x][x]
            either 10 > x: (now/day) [join "0" x][x]
            "_" 
            either 10 > x: first (now/time) [join "0" x][x]
            either 10 > x: second (now/time) [join "0" x][x]
        ] 
        

        Red 有pad,所以 rgchris 的回答很好。然而,像 rgchris 所做的那样,不需要date: now

        rejoin [
            now/year 
            pad/left/with now/month 2 #"0" 
            pad/left/with now/day 2 #"0" 
            "_" 
            pad/left/with first (now/time) 2 #"0" 
            pad/left/with second (now/time) 2 #"0" 
        ] 
        

        【讨论】:

        • 肯定需要date: now。如果您的多个 NOW 调用跨越午夜边界,您最多会得到不正确的结果。
        猜你喜欢
        • 1970-01-01
        • 2017-06-14
        • 1970-01-01
        • 2017-02-03
        • 1970-01-01
        • 2018-03-13
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        相关资源
        最近更新 更多