如何从“现在”获取格式化的日期和时间字符串?

时间:2019-06-09 04:54:36

标签: rebol red

我在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

问题:
如何修改上面的代码以从20190608_2147获得类似now的内容?

谢谢。

3 个答案:

答案 0 :(得分:3)

我已经为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

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

尽管您不需要用于特定示例的脚本,但是可以提取并加入各个组件:

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

答案 1 :(得分: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 
]

答案 2 :(得分:-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]
] 

红色有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" 
]