Linux: กำหนดวันที่ผ่านบรรทัดคำสั่ง


76

จะเปลี่ยนวันที่ของระบบใน Linux ได้อย่างไร?

ฉันต้องการเปลี่ยน:

  • ปีเดียวเท่านั้น
  • เดือนเดียวเท่านั้น
  • วันที่เท่านั้น
  • การรวมกันของทั้งสามข้างต้น

2
คุณสามารถใช้เช่นdate --set='-2 years'เพื่อตั้งค่านาฬิกาสองปีโดยปล่อยให้องค์ประกอบอื่น ๆ ทั้งหมดเหมือนกัน คุณสามารถเปลี่ยนเดือนและวันของเดือนด้วยวิธีเดียวกัน ฉันไม่ได้ตรวจสอบสิ่งที่จะเกิดขึ้นหากการคำนวณนั้นส่งผลให้เกิด datetime ที่ไม่มีอยู่จริงเช่นในระหว่างการเปลี่ยนแปลงแบบ DST แต่พฤติกรรมนั้นควรจะเหมือนกันกับพฤติกรรม "ตั้งค่าทั้งวันที่และเวลาให้เป็นรูปธรรม"
Christian Severin

สมมติว่าคุณกำลังพยายามกำหนดวันที่เป็นเวลาปัจจุบันคุณสามารถทำได้sudo ntpd -gqเพื่อให้การอัปเดตระบบโดยอัตโนมัติโดยใช้บริการ ntp
Steven Soroka

คำตอบ:


95

ใช้date -s:

date -s '2014-12-25 12:34:56'

sudoเรียกว่าเป็นรากหรือใต้ การเปลี่ยนแปลงเพียงหนึ่งในปี / เดือน / วันนั้นเป็นสิ่งที่ท้าทายมากกว่าและจะเกี่ยวข้องกับการทำซ้ำบิตของวันที่ปัจจุบัน นอกจากนี้ยังมีเครื่องมือวันที่ GUI ที่สร้างขึ้นในสภาพแวดล้อมเดสก์ท็อปหลัก ๆ ซึ่งมักจะเข้าถึงได้ตลอดเวลา

หากต้องการเปลี่ยนเพียงบางส่วนคุณสามารถใช้การทดแทนคำสั่งในสตริงวันที่:

date -s "2014-12-25 $(date +%H:%M:%S)"

จะเปลี่ยนวันที่ แต่ให้เวลา ดูman dateการจัดรูปแบบรายละเอียดในการสร้างชุดอื่น ๆ : แต่ละองค์ประกอบมี%Y, %m, %d, %H, และ%M%S


ฉันไม่ต้องการเปลี่ยนเวลา
SHW

5
ไม่มีตัวเลือกให้ทำ คุณสามารถใช้date -s "2014-12-25 $(date +%H:%M:%S)"เพื่อเปลี่ยนวันที่และใช้เวลาปัจจุบันซ้ำได้
Michael Homer

มาที่นี่และเวลารวมถึงนาทีที่ตรงกับเวลาปัจจุบัน - ดี
Alex2php

2
date: cannot set date: Invalid argument
Chris Stryczynski

@MichaelHomer @SHW date -s 2018-01-01มันเป็นไปได้ที่จะเปลี่ยนเฉพาะวันที่มีคำสั่งเช่น บางคนแบ่งปันสิ่งนี้ในคำตอบด้วย: superuser.com/questions/870068/…
baptx

42

เวลาของระบบ

คุณสามารถใช้dateเพื่อกำหนดวันที่ของระบบ การนำ GNU ไปใช้date(ตามที่พบในระบบที่ใช้ระบบปฏิบัติการลินุกซ์ส่วนใหญ่ที่ไม่ได้ฝังอยู่) ยอมรับรูปแบบที่แตกต่างกันมากมายเพื่อตั้งเวลานี่เป็นตัวอย่าง:

ตั้งเฉพาะปี:

date -s 'next year'
date -s 'last year'

ตั้งค่าเฉพาะเดือน:

date -s 'last month'
date -s 'next month'

ตั้งเฉพาะวัน:

date -s 'next day'
date -s 'tomorrow'
date -s 'last day'
date -s 'yesterday'
date -s 'friday'

รวมทั้งหมดเข้าด้วยกัน:

date -s '2009-02-13 11:31:30' #that's a magical timestamp

เวลาฮาร์ดแวร์

ขณะนี้เวลาของระบบได้รับการตั้งค่าแล้ว แต่คุณอาจต้องการซิงค์กับนาฬิกาฮาร์ดแวร์:

ใช้--showเพื่อพิมพ์เวลาของฮาร์ดแวร์:

hwclock --show

คุณสามารถตั้งค่านาฬิกาฮาร์ดแวร์เป็นเวลาปัจจุบันของระบบ:

hwclock --systohc

หรือเวลาระบบไปยังนาฬิกาฮาร์ดแวร์

hwclock --hctosys

2
คะแนนโบนัสสำหรับการอธิบายวิธีที่ไม่ชัดเจนคุณสามารถกำหนดวันที่ด้วยตัวอย่างและเพื่อชี้ให้เห็นความแตกต่างระหว่าง "เวลาของระบบ" และ "นาฬิกาฮาร์ดแวร์" คำตอบที่เป็นประโยชน์มาก!
Mark Edington

3

คุณเปลี่ยนวันที่ด้วยdateคำสั่ง อย่างไรก็ตามคำสั่งคาดว่าวันที่เต็มเป็นอาร์กิวเมนต์:

# date -s "20141022 09:45"
Wed Oct 22 09:45:00 BST 2014

หากต้องการเปลี่ยนส่วนหนึ่งของวันที่ให้ส่งออกวันที่ปัจจุบันด้วยส่วนวันที่ที่คุณต้องการเปลี่ยนเป็นสตริงและอื่น ๆ ทั้งหมดเป็นตัวแปรการจัดรูปแบบวันที่ จากนั้นส่งผ่านไปยังdate -sคำสั่งเพื่อตั้งค่า:

# date -s "$(date +'%Y12%d %H:%M')"
Mon Dec 22 10:55:03 GMT 2014

เปลี่ยนเดือนเป็นเดือนที่ 12 - ธันวาคม

รูปแบบวันที่คือ:

  • %Y - ปี
  • %m - เดือน
  • %d - วัน
  • %H - ชั่วโมง
  • %M - นาที

ฉันพยายามที่จะเปลี่ยน แต่มันไม่เปลี่ยนแปลง: - $ sudo date --set = "2015-09-30 10: 05: 59.990" พุธ 30 กันยายน 10:05:59 +0530 2015 $ date วันที่ พ.ค. 23 15:10:37 +0530 2019
Vinod

2

สำหรับคนอย่างฉันใช้ ESXI 5.1 นี่คือสิ่งที่ระบบตอบฉัน

~ # date -s "2016-03-23 09:56:00"
date: invalid date '2016-03-23 09:56:00'

ฉันต้องใช้คำสั่ง ESX เฉพาะแทน:

esxcli system time set  -y 2016 -M 03 -d 23  -H 10 -m 05 -s 00

3
ขอบคุณสำหรับ -1 แต่คุณจะคิดการอธิบายว่าทำไม ? หากคุณได้คำตอบที่ดีกว่า / สมบูรณ์กว่า / มากขึ้นกว่านี้อย่าลังเลที่จะแสดงความคิดเห็น
Balmipour

1

คำสั่งที่จะเปลี่ยนวันระบบdateคือ

มีสองวิธีในการเรียกคำสั่ง date (ใน Linux):

   date [OPTION]... [+FORMAT]
   date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

ง่าย

วิธีที่ง่ายที่สุดคือการใช้date -sที่จะช่วยให้การใช้งานของง่าย ญาติวัน

 $ date -s yesterday; date
 date: cannot set date: Operation not permitted
 Sat Jan  5 07:21:07 EST 2019
 Sun Jan  6 07:21:07 EST 2019

$วันที่ไม่ได้เปลี่ยนเพราะมันกำลังดำเนินการกับผู้ใช้ที่ จำกัด หากคุณต้องการเปลี่ยนวันที่ให้ใช้ root ( #) หรือ sudo:

 $ sudo date -s yesterday; date
 Sat Jan  5 07:21:07 EST 2019
 Sat Jan  5 07:21:07 EST 2019

ดังนั้นการเปลี่ยนส่วนใด ๆ ของวันที่สัมพัทธ์จึงเป็นเรื่องง่ายเหมือนการตั้งชื่อ:

 $ date -s "5 years ago"
 Mon Jan  6 08:26:26 EST 2014

 $ date -s "+6 months"
 Sat Jul  6 08:28:39 EDT 2019

 $ date -s "+3 hours -13 minutes"
 Sun Jan  6 11:16:59 AST 2019

วันที่แน่นอนจะซับซ้อนกว่านี้เล็กน้อยเนื่องจากต้องการรายละเอียดเพิ่มเติม:

 $ date -s "2001-07-23 10:11:12"

หรือคุณสามารถใช้คำสั่ง date สองครั้ง:

 $ date -s "$(date +'%Y-%m-%d %H:%M:%S')"

แทนที่ค่าใด ๆ%ด้วยค่าที่ถูกต้องและวันที่จะถูกตั้งค่า (เป็น root เท่านั้น)

 $ date -s "$(date +'%Y-11-%d %H:%M:%S')"
 Wed Nov  6 08:37:15 EST 2019

โดยตรง

รูปแบบวันที่สายที่สองจะใช้ในการโดยตรงเปลี่ยนวันระบบ

 date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

ดังนั้น:

 date 11230812              # MMDDhhmm

จะตั้งวันที่ 23 พฤศจิกายนเวลา 08 น. และ 12 นาที

BSD มีคำสั่งที่คล้ายกันแต่มีรูปแบบที่แตกต่างกัน ([[[[[cc] yy] mm] dd] HH] MM [.ss])

ลองdateในฐานะผู้ใช้ที่ จำกัด เพื่อดูว่าจะทำอะไร (โดยไม่ต้องเปลี่ยนอะไรเลย):

 $ date 11230812
 date: cannot set date: Operation not permitted
 Sat Nov 23 08:12:00 EST 2019

หรือถ้าคุณต้องการเปลี่ยนวันที่ในฐานะรูท:

 # date 11230812
 # date
 Sat Nov 23 08:12:00 EST 2019

โปรดทราบว่าบริการเช่น NTP หรือ chrony จะได้รับผลกระทบ และหากเริ่มต้นใหม่จะรีเซ็ตวันที่กลับเป็นของจริง

เพิ่ม YY เพื่อตั้งปี:

 $ date 1123081222
 date: cannot set date: Operation not permitted
 Wed Nov 23 08:12:00 EST 2022

หรือ CCYY เพื่อตั้งปีและศตวรรษ:

 $ date 112308121982
 date: cannot set date: Operation not permitted
 Tue Nov 23 08:12:00 EST 1982

-1

ฉันใช้คำสั่ง date และรูปแบบเวลาที่แสดงด้านล่างเพื่อตั้งค่าวันที่จากคำสั่ง terminal shell ให้ดำเนินการบน Android Things ซึ่งใช้ Linux Kernal

วันที่ 092615002017.00

MMDDHHMMYYYY.SS

MM - เดือน - 09

DD - วัน - 26

HH - ชั่วโมง - 15

MM - ต่ำสุด - 00

YYYY - ปี - 2017

.SS - วินาที - 00


เนื่องจากสิ่งนี้ไม่ทำงานกับ GNU หรือ BSD dateคุณช่วยกรุณาเพิ่มข้อมูลเพิ่มเติมเกี่ยวกับระบบที่เกี่ยวข้องและคำถามที่เกี่ยวข้อง
Kusalananda
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.