GAWK:反转strftime() – 使用格式模式将datestring转换为自epoc时间戳以来的秒数

Gnu AWK提供了内置函数

strftime() 

可以将时间戳1359210984转换为Sat 26. Jan 15:36:24 CET 2013 。 我找不到这样做的function:

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

然后seconds1359210984

所以,datestring应该可以通过格式模式来转换。

我只想在gawk中做这个。

编辑1:

我只想在gawk中进行date转换,以便进一步处理stream。

编辑2:

我澄清了我的问题。 在“将这样做”的代码示例中,这是有点草率的。

你正在寻找的函数被称为mktime() 。 您应该使用gensub()函数将gensub()操作为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。