我有时间像2013-04-29 08:17:58。我需要将其转换为自纪元时间以来的秒数。 请不要perl和我的操作系统是solaris。 +%s不起作用。 nawk'BEGIN {print srand()}'将当前时间转换为秒,但不会将给定时间转换为秒。
由于
答案 0 :(得分:5)
这是一个不需要perl的shell函数:
function d2ts
{
typeset d=$(echo "$@" | tr -d ':- ' | sed 's/..$/.&/')
typeset t=$(mktemp) || return -1
typeset s=$(touch -t $d $t 2>&1) || { rm $t ; return -1 ; }
[ -n "$s" ] && { rm $t ; return -1 ; }
truss -f -v 'lstat,lstat64' ls -d $t 2>&1 | nawk '/mt =/ {printf "%d\n",$10}'
rm $t
}
$ d2ts 2013-04-29 08:17:58
1367216278
请注意,返回的值取决于您的时区。
$ TZ=GMT d2ts 2013-04-29 08:17:58
1367223478
工作原理:
touch
的格式(此处为“2013-04-29 ls
命令以获取文件修改时间并将其打印为整数答案 1 :(得分:0)
在UNIX上的C / C ++中,您可以直接转换:
struct tm tm;
time_t t;
tm.tm_isdst = -1;
if (strptime("2013-04-29 08:17:58", "%Y-%m-%d %H:%M:%S", &tm) != NULL) {
t = mktime(tm);
}
cout << "seconds since epoch: " << t;
有关示例,请参阅Opengroup manpage strptime()
。
我很欣赏它背后的触感和触感。虽然,好吧,只是不要紧紧地做这个......