将 unix 日期转换为整数值
Convert unix date to integer value
您好,我有特定格式的 UNIX 文件日期 2017-02-01
我想将其转换为 20170201
之类的整数值。我能做些什么来获得这个 output.My UNIX 框是(SunOS 5.10)。我试图检查下面的命令以查看它们 output.But 我没有得到 anything.Can 有人帮忙吗?
bash-3.2$ date +'%s'
%s
bash-3.2$ date +"%s"
%s
bash-3.2$ date +%s
%s
当我尝试 date -d "Filename" +%Y%m%d 选项时,它出错了:-
date: bad conversion
usage: date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]
你可以通过这行代码得到你喜欢的日期(bash):
date +"%Y%m%d"
您可以像这样将其用作文件名:
_now=$(date +"%Y%m%d")
_file="/tmp/$_now.ext"
然后使用 $_file 作为您的文件名
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
$
用这个命令解决了它-:
browserDate="2016-11-21"
dateConversion="${browserDate//'-'}"
您好,我有特定格式的 UNIX 文件日期 2017-02-01
我想将其转换为 20170201
之类的整数值。我能做些什么来获得这个 output.My UNIX 框是(SunOS 5.10)。我试图检查下面的命令以查看它们 output.But 我没有得到 anything.Can 有人帮忙吗?
bash-3.2$ date +'%s'
%s
bash-3.2$ date +"%s"
%s
bash-3.2$ date +%s
%s
当我尝试 date -d "Filename" +%Y%m%d 选项时,它出错了:-
date: bad conversion
usage: date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]
你可以通过这行代码得到你喜欢的日期(bash):
date +"%Y%m%d"
您可以像这样将其用作文件名:
_now=$(date +"%Y%m%d")
_file="/tmp/$_now.ext"
然后使用 $_file 作为您的文件名
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
$
用这个命令解决了它-:
browserDate="2016-11-21"
dateConversion="${browserDate//'-'}"