4

Gnu AWK 提供了内置函数

strftime()

它可以将时间戳转换1359210984Sat 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:

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

4

2 回答 2

3

您要查找的函数称为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

有关更多信息,请查阅手册,特别是时间函数字符串函数。HTH。

于 2013-01-27T08:44:33.220 回答
0

您可以使用 datetime 中的 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

于 2021-03-01T20:10:38.697 回答