将unix日期转换为整数值

将unix日期转换为整数值,unix,unix-timestamp,dos2unix,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 usa

您好,我的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]

您可以通过这行代码(bash)获得您喜欢的日期:

您可以将其用作如下文件名:

_now=$(date +"%Y%m%d")
_file="/tmp/$_now.ext"
然后使用$\u文件作为文件名

SunOS 5.10(Solaris 10)已经相当旧了。有些事情它做不到

特别是,我注意到它的
date
命令依赖
strftime()
进行格式化,Solaris 10的strftime不支持
%s
。这解释了你在问题中的测试结果

如果您真的只需要YYYYMMDD格式,那么以下内容应该可以使用:

$ date '+%Y%m%d'
如果您正在寻找一个纪元秒,那么您可能必须使用其他工具。例如,Nawk应安装在您的系统上:

$ nawk 'BEGIN{print srand}'
您可以
mannawk
并搜索
srand
,以了解其工作原理

或者,如果安装了Perl,也可以使用它:

$ perl -e 'print time . "\n";'
这些是获取当前纪元秒的策略,但是初始的
date
命令是按照您建议的方式格式化日期的正确方法


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

但是你可以自己在一个非常短的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;
}

用这个命令解决了它-:

browserDate="2016-11-21"
dateConversion="${browserDate//'-'}"

文档对
+format
的值怎么说?文档喜欢什么?人工日期??是,
人工日期
+format
参数中允许哪些格式说明符?类似于
“+%Y%m%d”
也许?@Oliver它工作正常,但它只给我当前日期值作为整数值。如何使它适用于特定文件???@ghoti它只给我当前系统日期的整数值。我想为一个特定的文件做这个。奥利弗,你能解释一下它是如何工作的吗?就像我现在有一个名为“crontest.sh”的文件一样,我如何在上面的代码中使用它来获取其创建日期作为整数值。Thanks@TusharSharma你能再解释一下你想归档什么吗?是否要通过crontest.sh创建文件?可能是sql转储或类似的内容?@Oliver文件已经存在,其名称为ex:“abc.txt”忽略上述示例。我有此文件的创建时间和日期。我想将其创建日期转换为整数值,如(此2017-02-01到20170201)。此命令(日期“+%Y%m%d”)如何执行可以与文件一起使用吗?你能解释一下“与文件一起”是什么意思吗?您是否试图通过编程确定文件的日期并将其存储在变量中?或者您正在尝试创建基于当前日期的文件名?还是别的什么?
$ 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
$
browserDate="2016-11-21"
dateConversion="${browserDate//'-'}"