【问题标题】:How to set time to 2 days after the current time with shell script in Solaris?如何在 Solaris 中使用 shell 脚本将时间设置为当前时间后 2 天?
【发布时间】:2016-01-24 23:27:15
【问题描述】:

我想把系统时间修改为两天后,但我发现我可以在Solaris中使用date命令将时间设置为特定时间:

#date mmddhhmmYY

但不能在当前时间加上两天。有没有一种简单的方法可以使用 shell 命令来完成这项任务?如果你知道linux中类似的东西,也请分享给我。

【问题讨论】:

  • 不确定以下命令中有多少仅适用于 POSIX / Linux。但是,这个命令有用吗? date +%m%d%H%M%Y。如果可行,那么您可以编写如下内容:date $(date +%m%d%H%M%Y)date `date +%m%d%H%M%Y`。在 linux 中,您也可以这样做:date -d "now + 2 days" 如果需要,请不要忘记使用 root 帐户运行它。
  • @yftse 这如何增加 2 天?
  • 您需要将当前日期转换为时间戳,然后添加 2*86400,然后将其转换回 mmddhhmmYY 格式。由于我无法访问 Solaris,剩下的交给您,但是 man date 应该可以帮助您完成这两种转换
  • @Gavriel,你是对的。在编辑中添加了“+2 天”。谢谢。
  • @user172261,如果上述两个条件都有效,请尝试以下操作:date $(date -d "now + 2 days" +%m%d%H%M%Y)

标签: linux shell solaris


【解决方案1】:

Solaris date 支持逐渐调整时间的语法。这可能是您最好的选择。

date -a $(( 48 * 60 * 60 * 60 ))

应该最终将您的日期更新为提前两天。这确实是设置系统时间的最佳方式,因为它会逐渐更新而不是突然向前跳(这会搞砸一堆正在运行的程序)。

除此之外,您可以编写一个很好的脚本,了解一个月中的日子和闰年,然后自己进行计算。如果您非常懒惰(像我一样)并且精确度和竞争条件不会让您感到困扰(像我一样,回答 StackOverflow 问题),您可以像这样进行破解:

#!/bin/sh

now=$(date +%H%M.%S) # current time
date 2359.59 # Set time to 11:59:59pm
sleep 1 # Wait a second so the day rolls over
date 2359.59 # Set time to 11:59:59pm
sleep 1 # Wait a second so the day rolls over
date "$now" # Set time back to what it was, but in the new day
date -a 2 # Gradually add two seconds back to the clock

tnarik/solaris10-minimal Vagrant box 上进行测试:

# ./adddaystodate
The current date is now Monday, 25 January 2016 00:46:59 GMT
Monday, 25 January 2016 23:59:59 GMT
Tuesday, 26 January 2016 23:59:59 GMT
Wednesday, 27 January 2016 00:46:59 GMT
The current date is now Wednesday, 27 January 2016 00:46:59 GMT

【讨论】:

    猜你喜欢
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 2010-12-18
    • 2018-12-23
    相关资源
    最近更新 更多