日期时间字符串采用以下格式:06/12/2012 07:21:22.如何将其转换为UNIX时间戳或纪元?
我想执行一个脚本并让它每x分钟运行一次命令.
关于学习bash脚本的任何资源的任何一般建议都可能非常酷.我使用Linux进行个人开发工作,所以bash脚本对我来说并不完全陌生,我只是从头开始编写自己的任何东西.
在我测试的两个系统上(一个32位的Ubuntu 12.04服务器和一个64位的Ubuntu 13.10 VM),time()给出的纪元以来的秒数可能与gettimeofday()不同.
具体来说,虽然我在调用time()
后调用gettimeofday()
,但返回的值time()
有时小于tv_sec
返回的值gettimeofday()
.
这显然发生在时钟滚动到新的秒钟之后.
这导致了我的一些代码中的错误,这些代码期望time()和gettimeofday()的秒可以互换.
示例代码演示此问题:
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
int main()
{
time_t start = time(NULL);
int same = 0;
int different = 0;
int max_usec = 0;
while (1) {
time_t t;
struct timeval tv;
gettimeofday(&tv, NULL);
t = time(NULL);
if (t < tv.tv_sec) {
different++;
if (tv.tv_usec > max_usec) {
max_usec = tv.tv_usec;
}
} else { …
Run Code Online (Sandbox Code Playgroud) 如何使用日期查找下一小时的秒数?我知道我能做到
date -d "next hour"
Run Code Online (Sandbox Code Playgroud)
但这只是增加1小时到现在.我想让它显示下一个整整一小时的秒数.例如,如果当前时间是9:39am
我想要找到的秒数10am
我们可以使用内置printf
函数打印当前时间,而无需调用date
像这样的外部命令,如下所示:
printf '%(%Y-%m-%d:%H:%M:%S)T %s\n' -1
# sample output: 2019-03-30:17:39:36,846
Run Code Online (Sandbox Code Playgroud)
我们如何让 printf 也打印毫秒或纳秒?在格式字符串中使用%3N
或%N
不起作用:
printf '%(%Y-%m-%d:%H:%M:%S,%3N)T %s\n' -1 # outputs 2019-03-30:17:38:16,%3N
printf '%(%Y-%m-%d:%H:%M:%S,%N)T %s\n' -1 # outputs 2019-03-30:17:38:16,%N
Run Code Online (Sandbox Code Playgroud)
但是, date 命令工作正常:
date +%Y-%m-%d:%H:%M:%S,%3N # gives 2019-03-30:17:39:36,846
date +%Y-%m-%d:%H:%M:%S,%N # gives 2019-03-30:17:39:36,160643077
Run Code Online (Sandbox Code Playgroud)
这是在 Red Hat Linux 7.3 版上。
我试图使at
bash命令运行,但是它对我不起作用。我可以将作业添加到队列中,但是时间到了就不能运行。我究竟做错了什么?
hpek@melda:~$ cat /usr/lib/cron/at.deny
hpek@melda:~$ atq
hpek@melda:~$ at now +2 minutes
echo TTTEEEST
job 12 at Sun May 6 02:09:00 2012
hpek@melda:~$ date
Sun May 6 02:10:24 CEST 2012
hpek@melda:~$ atq
12 Sun May 6 02:09:00 2012
hpek@melda:~$
Run Code Online (Sandbox Code Playgroud) 我编写了一个shell脚本,其中包含一些用于收集各种测试日志的命令.但是我想在特定命令之前放置等待时间,以便在启动shell脚本后30分钟后运行.任何有相关知识的人请帮助我出.
提前致谢