AWK:strftime()的反转 - 使用格式模式将日期字符串转换为自纪元时间戳以来的秒数

时间:2013-01-26 14:41:28

标签: linux shell gawk

Gnu AWK提供内置功能

strftime()

可以将1359210984之类的时间戳转换为Sat 26. Jan 15:36:24 CET 2013。 我找不到能做到这一点的功能:

seconds = timefromdate("Sat 26. Jan 15:36:24 CET 2013", "%a %d. %b %H:%M:%S CET %Y")

seconds = timefromdate("2013-01-26 15:36:24", "%Y-%m-%d %H:%M:%S")

seconds则为1359210984

因此,日期字符串应该可以通过格式模式转换。

我只想在gawk中这样做。

编辑1:

我想仅在gawk中转换日期以进一步处理流。

编辑2:

我澄清了我的问题。在“会做这个”代码示例中有点草率。

2 个答案:

答案 0 :(得分:1)

您正在寻找的功能称为mktime()。您应该使用gensub()函数将datespec操作为mktime()可以读取的格式。


要格式化您提供的第二个示例,请考虑:

BEGIN {
    t = "2013-01-26 15:36:24"
    f = "\\1 \\2 \\3 \\4 \\5 \\6"

    s = mktime(gensub(/(....)-(..)-(..) (..):(..):(..)/, f, "", t))

    print s
}

我的机器上的结果:

1359178584

要格式化您提供的第一个示例,请考虑:

BEGIN {
    t = "Sat 26. Jan 15:36:24 CET 2013"

    gsub(/\.|:/, FS, t)
    split(t,a)

    Y = a[8]
    M = convert(a[3])
    D = a[2]

    h = a[4]
    m = a[5]
    s = a[6]

    x = mktime(sprintf("%d %d %d %d %d %d", Y, M, D, h, m, s))

    print x
}

function convert(month) {

    return(((index("JanFebMarAprMayJunJulAugSepOctNovDec", month) - 1) / 3) + 1)
}

我的机器上的结果:

1359178584

有关详细信息,请参阅manual,具体为time functionsstring functions。 HTH。

答案 1 :(得分:0)

您可以从日期时间使用 python 方法 strptime:


from datetime import datetime

date_string = "21 June, 2018"

print("date_string =", date_string)
print("type of date_string =", type(date_string))

date_object = datetime.strptime(date_string, "%d %B, %Y")

print("date_object =", date_object)
print("type of date_object =", type(date_object))

有关更多信息,请参阅此处: https://www.programiz.com/python-programming/datetime/strptime