Linux: đặt ngày thông qua dòng lệnh


76

Làm cách nào để thay đổi ngày hệ thống trong Linux?

Tôi muốn thay đổi:

  • Năm duy nhất
  • Chỉ tháng
  • Chỉ ngày
  • Bất kỳ sự kết hợp của ba trên

2
Bạn có thể sử dụng ví dụ date --set='-2 years'để đặt lại đồng hồ hai năm, để tất cả các yếu tố khác giống hệt nhau. Bạn có thể thay đổi tháng và ngày trong tháng theo cùng một cách. Tôi đã không kiểm tra xem điều gì sẽ xảy ra nếu phép tính đó dẫn đến thời gian thực sự không tồn tại, ví dụ như trong quá trình chuyển đổi DST, nhưng hành vi phải giống hệt với hành vi "đặt cả ngày và giờ thành giá trị cụ thể" thông thường.
Christian Severin

Giả sử bạn đang cố gắng đặt ngày ở thời điểm hiện tại, bạn có thể sudo ntpd -gqtự động cập nhật hệ thống bằng dịch vụ ntp.
Steven Soroka

Câu trả lời:


95

Sử dụng date -s:

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

Chạy nó như root hoặc dưới sudo. Chỉ thay đổi một trong năm / tháng / ngày là một thách thức nhiều hơn và sẽ liên quan đến việc lặp lại các bit của ngày hiện tại. Ngoài ra còn có các công cụ ngày GUI được tích hợp trong các môi trường máy tính để bàn chính, thường được truy cập qua đồng hồ.

Để chỉ thay đổi một phần thời gian, bạn có thể sử dụng thay thế lệnh trong chuỗi ngày:

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

sẽ thay đổi ngày, nhưng giữ thời gian. Xem man dateđể định dạng chi tiết để xây dựng kết hợp khác: các thành phần riêng lẻ %Y, %m, %d, %H, %M, và %S.


Tôi không muốn thay đổi thời gian
SHW

5
Không có lựa chọn để làm điều đó. Bạn có thể sử dụng date -s "2014-12-25 $(date +%H:%M:%S)"để thay đổi ngày và sử dụng lại thời gian hiện tại.
Michael Homer

đã đến đây và giờ cũng như phút phù hợp với thời gian hiện tại. - tốt đẹp
Alex2php

2
date: cannot set date: Invalid argument
Chris Stryczynski

@MichaelHomer @SHW chỉ có thể thay đổi ngày bằng một lệnh như thế nào date -s 2018-01-01. Ai đó cũng chia sẻ điều này trong một câu trả lời: superuser.com/questions/870068/
mẹo

42

Thời gian hệ thống

Bạn có thể sử dụng dateđể thiết lập ngày hệ thống. Việc triển khai GNU date(như được tìm thấy trên hầu hết các hệ thống dựa trên Linux không nhúng) chấp nhận nhiều định dạng khác nhau để đặt thời gian, ở đây một vài ví dụ:

chỉ đặt năm:

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

chỉ đặt tháng:

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

chỉ đặt ngày:

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

tập hợp tất cả lại với nhau:

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

Thời gian phần cứng

Bây giờ thời gian hệ thống đã được đặt, nhưng bạn có thể muốn đồng bộ hóa nó với đồng hồ phần cứng:

Sử dụng --showđể in thời gian phần cứng:

hwclock --show

Bạn có thể đặt đồng hồ phần cứng theo thời gian hệ thống hiện tại:

hwclock --systohc

Hoặc thời gian hệ thống đến đồng hồ phần cứng

hwclock --hctosys

2
Điểm thưởng để minh họa các cách không rõ ràng mà bạn có thể đặt ngày bằng các ví dụ và để chỉ ra sự khác biệt giữa "thời gian hệ thống" và "đồng hồ phần cứng". Câu trả lời rất hữu ích!
Đánh dấu Edington

3

Bạn thay đổi ngày với datelệnh. Tuy nhiên, lệnh mong đợi một ngày đầy đủ như là đối số:

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

Để thay đổi một phần của ngày, hãy xuất ngày hiện tại với phần ngày mà bạn muốn thay đổi dưới dạng chuỗi và tất cả các phần khác dưới dạng biến định dạng ngày. Sau đó chuyển nó đến date -slệnh để đặt nó:

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

thay đổi tháng sang tháng thứ 12 - tháng 12.

Các định dạng ngày là:

  • %Y - Năm
  • %m - Tháng
  • %d - Ngày
  • %H - Giờ
  • %M - Phút

Tôi cố gắng thay đổi nhưng nó không thay đổi: - $ sudo date --set = "2015-09-30 10: 05: 59.990" Thứ tư 30 tháng 10 10:05:59 +0530 2015 $ ngày Thu May 23 15:10:37 +0530 2019
Vinod

2

Đối với những người như tôi đang chạy ESXI 5.1, đây là những gì hệ thống đã trả lời tôi

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

Tôi đã phải sử dụng một lệnh ESX cụ thể thay thế:

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

3
Cảm ơn vì -1, nhưng bạn có phiền giải thích tại sao không? Nếu bạn có câu trả lời tốt hơn / đầy đủ hơn / chính xác hơn, hãy bình luận.
Balmipour

1

Lệnh thay đổi ngày hệ thốngdate.

Có hai cách để gọi lệnh date (trong Linux):

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

Dễ dàng

Cách dễ nhất là sử dụng date -svì nó cho phép sử dụng các ngày tương đối đơn giản

 $ 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

Ngày không thay đổi vì nó được thực hiện với một người dùng hạn chế $. Nếu bạn thực sự muốn ngày thay đổi, hãy sử dụng root ( #) hoặc sudo:

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

Vì vậy, thay đổi bất kỳ phần nào của một ngày tương đối cũng dễ như đặt tên cho nó:

 $ 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

Ngày tuyệt đối phức tạp hơn một chút vì chúng cần chi tiết hơn:

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

Hoặc, bạn có thể sử dụng lệnh date hai lần:

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

thay thế bất kỳ %giá trị nào bằng một giá trị hợp lệ và ngày sẽ được đặt (chỉ với quyền root).

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

thẳng thắn

Mẫu cuộc gọi ngày thứ hai được sử dụng để thay đổi trực tiếp ngày hệ thống.

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

Vì thế :

 date 11230812              # MMDDhhmm

Sẽ đặt ngày vào ngày 23 tháng 11 lúc 08h và 12 phút.

BSD có một lệnh tương tự nhưng có định dạng khác ([[[[[cc] yy] mm] dd] HH] MM [.ss]).

Hãy thử datelàm người dùng hạn chế để xem những gì nó sẽ làm (không thay đổi bất cứ điều gì):

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

Hoặc, nếu bạn thực sự muốn thay đổi ngày, với quyền root:

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

Lưu ý rằng các dịch vụ như NTP hoặc chrony sẽ bị ảnh hưởng. Và, nếu được khởi động lại sẽ đặt lại ngày trở lại ngày thực.

Thêm một YY để đặt năm:

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

Hoặc một CCYY để thiết lập năm thế kỷ:

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

-1

Tôi đã sử dụng lệnh ngày và định dạng thời gian được liệt kê bên dưới để đặt thành công ngày từ lệnh shell terminal được thực hiện trên Android Things sử dụng Linux Kernal.

ngày 092615002017.00

MMDDHHMMYYYY.SS

MM - Tháng - 09

DD - Ngày - 26

HH - Giờ - 15

MM - Tối thiểu - 00

YYYY - Năm - 2017

.SS - giây - 00


Vì điều này không hoạt động với GNU hoặc BSD date, bạn có thể vui lòng thêm thông tin thêm về hệ thống này có liên quan đến điều gì và mức độ phù hợp với câu hỏi cụ thể này.
Kusalananda
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.