我一直认为 Linux 系统使用/etc/timezone作为时区,但是:
$ cat /etc/timezone
Etc/UTC
$ date
Tue May 28 12:34:01 PM PDT 2024
此处,/etc/timezone是 UTC,但date
以 PDT 进行报告。
如何date
确定时区?
如果重要的话,这是 Ubuntu 22.04。
我一直认为 Linux 系统使用/etc/timezone作为时区,但是:
$ cat /etc/timezone
Etc/UTC
$ date
Tue May 28 12:34:01 PM PDT 2024
此处,/etc/timezone是 UTC,但date
以 PDT 进行报告。
如何date
确定时区?
如果重要的话,这是 Ubuntu 22.04。
我正在 KSH 中编写一个脚本,需要您的帮助来找到从日期中删除分钟和秒的逻辑。如果用户将 2024-12-22-16-43-40 传递给变量,则应将其转换为 2024-12-22-16-00-00。
在 shell 中,如何使用单个命令(或单个命令行)根据文件中的元数据自动设置 Quicktime 视频文件的修改(或创建)日期和时间?对于 JPG 文件,我们有exiv2 -T
,但是对于 .mov 文件有类似的命令吗?
举个例子,让我们从包含以下元数据的文件 video.mov 开始:
$ exiftool video.mov
ExifTool Version Number : 12.57
File Name : video.mov
Directory : .
File Size : 64 MB
File Modification Date/Time : 2023:07:04 02:53:05+02:00
File Access Date/Time : 2023:07:01 11:42:46+02:00
File Inode Change Date/Time : 2023:07:04 02:53:05+02:00
File Permissions : -rw-r--r--
File Type : MOV
File Type Extension : mov
MIME Type : video/quicktime
Major Brand : Apple QuickTime (.MOV/QT)
Minor Version : 0.0.0
Compatible Brands : qt
Media Data Size : 64215615
Media Data Offset : 36
Movie Header Version : 0
Create Date : 2023:07:01 11:42:00
Modify Date : 2023:07:01 11:42:46
Time Scale : 600
Duration : 0:00:45
Preferred Rate : 1
Preferred Volume : 100.00%
Preview Time : 0 s
Preview Duration : 0 s
Poster Time : 0 s
Selection Time : 0 s
Selection Duration : 0 s
Current Time : 0 s
Next Track ID : 6
Track Header Version : 0
Track Create Date : 2023:07:01 11:42:00
Track Modify Date : 2023:07:01 11:42:46
Track ID : 1
Track Duration : 0:00:45
Track Layer : 0
Track Volume : 0.00%
Image Width : 1920
Image Height : 1080
Clean Aperture Dimensions : 1920x1080
Production Aperture Dimensions : 1920x1080
Encoded Pixels Dimensions : 1920x1080
Graphics Mode : ditherCopy
Op Color : 32768 32768 32768
Compressor ID : hvc1
Source Image Width : 1920
Source Image Height : 1080
X Resolution : 72
Y Resolution : 72
Compressor Name : HEVC
Bit Depth : 24
Video Frame Rate : 29.997
Balance : 0
Audio Format : mp4a
Audio Channels : 2
Audio Bits Per Sample : 16
Audio Sample Rate : 44100
Purchase File Format : mp4a
Warning : [minor] The ExtractEmbedded option may find more tags in the media data
Matrix Structure : 1 0 0 0 1 0 0 0 1
Content Describes : Track 1
Media Header Version : 0
Media Create Date : 2023:07:01 11:42:00
Media Modify Date : 2023:07:01 11:42:46
Media Time Scale : 600
Media Duration : 0:00:45
Media Language Code : und
Gen Media Version : 0
Gen Flags : 0 0 0
Gen Graphics Mode : ditherCopy
Gen Op Color : 32768 32768 32768
Gen Balance : 0
Handler Class : Data Handler
Handler Vendor ID : Apple
Handler Description : Core Media Data Handler
Meta Format : mebx
Handler Type : Metadata Tags
Make : Apple
Model : iPhone SE (2nd generation)
Software : 16.5.1
Creation Date : 2023:07:01 13:42:00+02:00
Image Size : 1920x1080
Megapixels : 2.1
Avg Bitrate : 11.3 Mbps
Rotation : 90
到目前为止,我自己能想到的最好的方法(设置修改日期)是阅读
$ exiftool video.mov | grep "Media Modify Date" | cut -f 19-20 -d ' '
,在我的例子中,
2023:07:01 11:42:46
(按照 UTC 或 GMT 标准化,这是正确的,因为在现实生活中,视频是在 13:42:… CEST 左右拍摄的),将输出中的:
日期替换为-
,最后发出
$ touch -d "2023-07-01 11:42:46 UTC" video.mov
(我的大胆猜测是,这句话比上面UTC
说的更好)。GMT
正如预期的那样,这会产生
$ ls --full-time video.mov | cut -d ' ' -f 6-8
2023-07-01 13:42:46.000000000 +0200
(机器位于 CEST 时区,因此+0200
)。结果就是我们想要的(因为视频本身拍摄的时区也是 CEST),但到达那里的过程是手动的。
如何自动exiftool … -d ' '
处理第一个命令序列 ( )中的日期,以便我们可以在单个命令行或脚本中同时发出第一个命令和第二个命令 ( )?touch …
或者,必须从视频文件中的元数据读取 .mov 视频文件的修改(或创建)时间,并以某种其他方式在操作系统级别进行设置。如何?(顺便说一句:由于某些文件的元数据字段Media Modify Date
可能全为零,例如,对于ffmpeg创建的文件,我们可能需要更多的编程逻辑,并在这种情况下尝试切换到其他一些字段的值,例如,添加Date/Time Original
和Media Duration
是否正确填充。)
也许有人已经完成了这项任务,而我们只需要使用适当的参数运行一个已经可用的程序?
当我试图设定时间
$(date +%s -d "2022-04-10 12:12:12")
我有时间
2022-04-10 19:12:12
如何明确设置时间?
团队,
有人可以帮忙找到下面的代码……Unix:如何计算从给定日期(如 10Dec2022 到今天)的天数。
寻找答案:截至(2023 年 3 月 22 日)102
我正在开发没有 RTC 电池的嵌入式系统。当互联网连接可用时,时间通过 NTP 同步(这并不总是发生)。当设备关闭时,时间将重置为过去的值。有时我注意到这个“默认”值已更新为更新的值。这些信息存储在文件系统中的什么位置?
在我的主机上,我可以展示1752 年大不列颠及其殖民地采用的公历:
$ cal september 1752
September 1752
Su Mo Tu We Th Fr Sa
1 2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
丹麦和挪威的相应采用发生得更早:
1700 年 2 月 18 日星期日,随后是 1700 年 3 月 1 日星期一。
我以为我可以覆盖时区环境变量来显示这一点,但这不起作用:
$ TZ=DK february 1700
February 1700
Su Mo Tu We Th Fr Sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29
如何cal
展示丹麦采用公历?
Mycal
由bsdmainutils
版本 11.1.2 提供。
man date
不会显示任何保留字,但它们有“现在”或“今天”等。
我想知道是否有任何明确的方法可以打印当天的开始(00:00:00)。
date -u -d "$(date +'%F')"
在任何情况下都够用吗?看起来有点傻。
我有数百万行数据,我的老板要求我为它们重新格式化。
格式为:
06/28/2022,04:00,142.01,142.38,141.59,142.15,3151
06/28/2022,04:01,142.1,142.1,142.1,142.1,196
我需要将第一个日期字段重新格式化为:
20220628,04:00,142.01,142.38,141.59,142.15,3151
20220628,04:01,142.1,142.1,142.1,142.1,196
%Y%m%d
我有以下内容:
gawk -F"," '{OFS=","; $1=strftime("%Y%m%d", $1); print $0}' AAPL.txt > AAPL.csv
但奇怪的是它有效,但产生的日期是 1969 年。
19691231,04:00,142.01,142.38,141.59,142.15,3151
19691231,04:01,142.1,142.1,142.1,142.1,196
我不明白为什么。我选择gawk
是因为awk
在 MacOS 上没有,strftime
并且在外部调用会date
产生巨大的性能影响。
我写了这个脚本:
#!/bin/bash
target="1.1.1.1"
while true;
do
ping $target -c 1 -v > /dev/null
if [[ $? -ne 0 ]]; then
echo "$(date +"%d/%m/%y %R:%S")" >> netStabilityLog
fi
sleep 5s
done
它工作得几乎完美,只有一个问题。在输出文件netStabilityLog
中,我得到:
28/06/22 17:19:26
28/06/22 17:20:06
28/06/22 17:45
28/06/22 18:36:00
28/06/22 18:51
有时,秒数不显示。这是为什么?