UTC
的服务器。看来这通常是个好习惯(如果我输入错误,请纠正我)。我需要以scp
格式复制的文件我看过尝试使用诸如find的
EDT
标志之类的东西来对/path/to/filename/data20120913
文件进行最后一天修改的文件,但是我没有任何运气。 /> 我不介意仅使用
rsync
复制当天的文件,但是截至目前为止,有一个4小时的窗口,运行-mtime -1
会给每台服务器提供不同的日期,这给我带来了一些麻烦。浏览
scp
,我看到我可以将时间输出为date +%Y%m%d
,但是我看不到将其输出为man date
这样的其他时区的方法我假设我还可以使用类似
UTC
的日期扩展名EDT
从纪元获取以秒为单位的日期,应用手动GNU
进行第二次计算,然后参见ab会将其渲染为日期-但是当白天开始时,仍然需要一个小时的时间。设置为date -d 20100909 +%s
?#1 楼
您可以设置查询持续时间的时区,从而:TZ=America/New_York date
请注意
TZ
设置和date
命令之间的空格。在类似Bourne和类似rc
的外壳程序中,这仅为命令行设置TZ
变量。在其他shell(csh
,tcsh
,fish
)中,您始终可以改用env
命令:env TZ=America/New_York date
tl; dr
在Linux上系统。时区在
/usr/share/zoneinfo
目录中的文件中定义。此结构通常被称为“ Olson数据库”,以表彰其创建者。每个时区的规则都定义为文本文件行,然后将其编译为二进制文件。这样编译的行定义了区域名称;该区域适用的一系列数据和时间;在标准时间内偏离UTC的时间;
例如,目录“ America”在所使用的文件
America/New_York
中包含纽约的必要信息, 请注意,不存在的区域(文件名)的规范将被忽略,并且会报告UTC时间。例如,这报告了错误的时间:
TZ="America/New York" date ### WRONG ###
单一UNIX规范版本3(称为SUSv3或POSIX-2001)指出,对于可移植性,该字符标识时区描述的字符串应以冒号开头。因此,我们还可以编写:
TZ=":America/New_York" date
TZ=":America/Los_Angeles" date
作为使用描述文件的路径名来指定时区的一种替代方法,SUSv3描述了POSIX模型。此格式将字符串定义为:
std offset [dst[offset][,start-date[/time],end-date[/time]]]
其中
std
是标准组件名称,而dst
是夏令时名称。每个名称包含三个或更多字符。 offset
在本初子午线以西的时区为正,而对子午线以东的时区为负。将偏移量添加到本地时间以获得UTC(以前称为GMT)。 start
和end
时间字段指示标准/日光转换发生的时间。例如,在美国东部,标准时间比UTC早5小时,我们可以指定EST5EDT
代替America/New_York
。但是,并非总是能识别这些替代方法,尤其是在美国以外的地区,最好避免使用。HP-UX(与SUSv3兼容的UNIX)在
/usr/lib/tztab
中使用文本规则,并且使用POSIX名称,例如EST5EDT ,CST6CDT,MST7MDT,PST8PDT。该文件包含每个时区的所有历史规则,类似于Olson数据库。注意:您应该能够通过检查以下目录找到所有时区:
/usr/share/zoneinfo
。评论
不知道我是不是错了,但是导出看起来比env命令好
–签名
17/12/23在15:58
@JRFerguson-如果列表中未包含时区,例如拉斯维加斯或内华达州,验证时间的其他方法是什么?
–有动力
19年1月31日在16:26
@动机如果您的城市或州不包括在内,请选择使用与您相同的区域信息的城市或州。例如,我在佛罗里达州,使用与纽约相同的时区,因此我的机器与纽约时间同步。
– JRFerguson
19年1月31日在17:45
@JRFerguson-假设此人知道各个时区,并能够使用其他方式,例如您的纽约。那将是唯一的选择吗?例如,我不住在欧洲,也不知道重叠的时区。
–有动力
19年1月31日在17:49
@Motivated您可以使用本网站之类的内容来帮助您查找区域中的其他点。
– JRFerguson
19年1月31日,17:53
#2 楼
您可以通过操作TZ
环境变量来完成此操作。以下内容将为您提供美国/东部时间的本地时间,这也足够聪明,可以在DST滚动时处理DST:# all on one line
TZ=":US/Eastern" date +%Y%m%d
/usr/share/zoneinfo内部的文件和目录。
#3 楼
小心!日期会愉快地吐出当前时区中的时间,如果您给它提供了一个无法识别的时区。检查一下:
-bash-4.2$ env TZ=EDT date
Wed Feb 18 19:34:41 EDT 2015
-bash-4.2$ date
Wed Feb 18 19:34:43 UTC 2015
请注意,没有称为EDT的时区。实际上,
-bash-4.2$ find /usr/share/zoneinfo -name "*EDT*"
返回
/usr/share/zoneinfo/EST5EDT
/usr/share/zoneinfo/posix/EST5EDT
/usr/share/zoneinfo/right/EST5EDT
这有效:
-bash-4.2$ TZ=EST5EDT date
Wed Feb 18 14:36:59 EST 2015
-bash-4.2$ date
Wed Feb 18 19:37:01 UTC 2015
但是,如果您的朋友居住在Gobbledygook的神秘土地上,并且其区域信息与您自己的区域一致,那么您可以将日期输出在Gobbledygook的区域中的时间,它将很乐意因此,使用nary作为退出值可以使您知道该区域不为人所知:
-bash-4.2$ TZ=Gobbledygook date
Wed Feb 18 19:37:36 Gobbledygook 2015
-bash-4.2$ echo $?
0
评论
YMMV:在我的MacOS / BSD机器上,格式错误的TZ字符串返回UTC时间。
–马克·哈德森(Mark Hudson)
19-09-20在17:40
+1为“ Gobbledygook的神秘土地”😂
– Leo Galleguillos
20-2-26在4:54
#4 楼
TODAY=$(TZ=":US/Eastern" date)
echo $TODAY
#5 楼
日期语法是不可思议且容易出错的,这使命令行调用很麻烦。因此,我编写了一个小脚本(我将其命名为worldtime),它将在其他一些时区中从基准时间zome(您本地的时区)打印指定的(或当前)时间,反之亦然。它是。调整它以适应您的需求,将其放在您的路径中,并使其可执行。#!/bin/sh # # Print the specified (or current) time from base time in other time zones # and the converse # # Base time zone from/to which to convert TZBASE=Europe/Athens # Time zones to display # See /usr/share/zoneinfo/ for more names TZONES='UTC America/Los_Angeles America/New_York Europe/London Europe/Paris' # Display format FORMAT='%H:%M (%p) %Z %a %m %b %Y' if [ "" ] ; then time="" else time=`date +%T` fi # Show the time from the specified input time zone in the specified output # time zone showtime() { TZIN= TZOUT= TZ=$TZOUT date --date='TZ="'$TZIN'"'" $time" +"$time $TZIN is $TZOUT $FORMAT" } for tz in $TZONES ; do showtime $TZBASE $tz done echo for tz in $TZONES ; do showtime $tz $TZBASE done
#6 楼
通常,您在本地时区有时间戳,需要将其转换为远程tz。可以使用以下方法完成:TZ=America/Curacao date -d 'Tue Nov 28 00:07:05 MSK 2016'
其中:
America/Curacao - remote timezone
MSK - local timezone
#7 楼
明天下午3点显示纽约时间date --date='TZ="America/NewYork" 15:00 tomorrow'
打印:
ti 3.11.2020 17.00.00 +0200
(ti是tiistai的芬兰语缩写,意思是星期二,英语)。
我的本地时区是芬兰/赫尔辛基。
所以明天下午17点在芬兰/赫尔辛基是同一时间:纽约下午3点。
评论
至少在Linux中,EDT不是公认的时区。看到我的“小心!”以下是整个丑闻的答案。如果您的* NIX品牌认可EDT,则仍应谨慎行事,并仔细检查您的时区字符串。另请参见此答案,该答案搜索/ usr / share / zoneinfo并在与您的查询匹配的区域中显示时间。