在solaris中将给定时间转换为秒

Asi*_*ati 5 bash shell solaris

我有时间像2013-04-29 08:17:58.我需要将其转换为自纪元时间以来的秒数.请不要perl和我的操作系统是solaris.+%s不起作用.nawk'BEGIN {print srand()}'将当前时间转换为秒,但不会将给定时间转换为秒.

谢谢

jll*_*gre 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
}
Run Code Online (Sandbox Code Playgroud)
$ d2ts 2013-04-29 08:17:58           
1367216278
Run Code Online (Sandbox Code Playgroud)

请注意,返回的值取决于您的时区.

$ TZ=GMT d2ts 2013-04-29 08:17:58
1367223478
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

  • 第一行将参数转换为适合的格式touch(此处为"2013-04-29
  • 08:17:58" - >"201304290817.58")
  • 第二行创建一个临时文件
  • 第三行将刚刚创建的文件的修改时间更改为所需的值
  • 如果设置时间失败,即第四行中止该功能,即提供的时间是否无效
  • 第五行跟踪ls命令以获取文件修改时间并将其打印为整数
  • 第六行删除临时文件