将unix日期转换为整数值

时间:2017-02-06 15:58:57

标签: unix unix-timestamp dos2unix

嗨,我的UNIX文件日期格式为2017-02-01我希望将其转换为整数值,如20170201。我能做什么得到这个输出。我的 UNIX 框是(SunOS 5.10)。我试图检查下面的命令,看看它们输出了什么。但我没有得到任何东西。任何人都可以帮忙吗?

bash-3.2$ date +'%s'
%s
bash-3.2$ date +"%s"
%s
bash-3.2$ date +%s
%s

当我尝试日期-d“文件名”+%Y%m%d 选项时,它错误地说: -

date: bad conversion
usage:  date [-u] mmddHHMM[[cc]yy][.SS]
        date [-u] [+format]
        date -a [-]sss[.fff]

3 个答案:

答案 0 :(得分:1)

您可以使用以下代码行(bash)获取您喜欢的日期:

date +"%Y%m%d"

你可以将它用作这样的文件名:

_now=$(date +"%Y%m%d")
_file="/tmp/$_now.ext"

然后使用$ _file作为您的文件名

答案 1 :(得分:0)

SunOS 5.10(Solaris 10)已经很老了。有一些事情它没有做。

特别是,我注意到它的date命令依赖于strftime()进行格式化,而according to the man page,Solaris 10的strftime不支持%s。这解释了您在问题中所做的测试中的结果。

如果您真的只想要YYYYMMDD格式,则以下内容应该有效:

$ date '+%Y%m%d'

如果您正在寻找第二个时代,那么您可能需要使用其他工具。例如,Nawk应该安装在你的系统上:

$ nawk 'BEGIN{print srand}'

您可以man nawk并搜索srand以了解其原因。

或者,您可以使用Perl,如果您已安装它:

$ perl -e 'print time . "\n";'

这些是获取当前纪元时间的策略,但您的初始date命令是以您建议的方式格式化日期的正确方法。

根据其他评论,您似乎还希望获得某些文件的时间戳。这不是date命令会做的事情。在其他操作系统(如Linux或FreeBSD)中,您使用stat命令,该命令在Solaris 10中不会显示为单独的shell命令。

但是你可以在一个使用fstat(2)系统调用的非常简短的C程序中自己完成。虽然它可能超出了此问题所需的范围,但您可以使用/usr/sfw/bin/gcc

进行编译
#include <stdio.h>
#include <time.h>
#include <fcntl.h>
#include <sys/stat.h>

int main(int argc, char **argv)
{
    struct tm info;
    char buf[80];
    struct stat fileStat;
    time_t epoch;

    if(argc != 2)
        return 1;

    int file=0;
    if((file=open(argv[1],O_RDONLY)) < -1)
        return 1;

    if(fstat(file,&fileStat) < 0)
        return 1;

    info = *localtime( &fileStat.st_mtime );

    epoch = mktime(&info);
    printf("%s:%ld\n", argv[1], (long) epoch );

    return 0;
}

例如:

$ gcc -o filedate filedate.c
$ ./filedate /bin/ls
/bin/ls:1309814136
$ perl -e 'use POSIX; print POSIX::strftime("%F %T\n", gmtime(1309814136));'
2011-07-04 21:15:36
$ ls -l /bin/ls
-r-xr-xr-x   1 root     bin        18700 Jul  4  2011 /bin/ls
$

答案 2 :(得分:0)

使用此命令解决 -

contenteditable