如何从 `now` 获取格式化的日期和时间字符串?

How to get a formatted date and time string from `now`?

我在 Windows 上使用 "Red Programming Language" 版本“0.6.4”并制作命令行应用程序。

我不懂红语,很多东西我都不懂。我确实在 (https://doc.red-lang.org/en/) 上查看了 "work in progress" 文档,然后才在这里提问。

我需要获取格式为 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 编写了一个名为 'Form Date' 的脚本,它将以与 STRFTIME 类似的方式格式化 dates/times。红色版本是 here.

do %form-date.red
probe form-date now "%Y%m%d_%H%M"

print first spec-of :form-date

脚本中包含单独的代码片段,用于格式化日期的各个组成部分!值。

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

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"
]

由于上述解决方案在 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 
]

这是另一种方式:

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" 
]