Linux: mengatur tanggal melalui baris perintah

77

Bagaimana cara mengubah tanggal sistem di Linux?

Saya ingin berubah:

  • Hanya Tahun
  • Hanya Bulan
  • Hanya Date
  • Kombinasi di atas tiga
SHW
sumber
2
Anda dapat menggunakan misalnya date --set='-2 years'untuk menyetel jam kembali dua tahun, membuat semua elemen lainnya identik. Anda dapat mengubah bulan dan hari dalam bulan dengan cara yang sama. Saya belum memeriksa apa yang terjadi jika perhitungan itu menghasilkan data yang tidak benar-benar ada, misalnya selama pergantian DST, tetapi perilaku tersebut harus identik dengan perilaku "atur tanggal dan waktu ke nilai konkret" yang biasa.
Christian Severin
Dengan asumsi Anda mencoba mengatur tanggal ke waktu saat ini, Anda dapat melakukan sudo ntpd -gqpembaruan sistem secara otomatis menggunakan layanan ntp.
Steven Soroka

Jawaban:

96

Gunakan date -s:

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

Jalankan itu sebagai root atau di bawah sudo. Mengubah hanya satu tahun / bulan / hari lebih merupakan tantangan dan akan melibatkan pengulangan dari tanggal saat ini. Ada juga alat tanggal GUI yang dibangun di lingkungan desktop utama, biasanya diakses sepanjang waktu.

Untuk mengubah hanya sebagian waktu, Anda dapat menggunakan substitusi perintah di string tanggal:

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

akan mengubah tanggal, tetapi pertahankan waktu. Lihat man dateuntuk memformat rincian untuk membangun kombinasi lain: komponen individu %Y, %m, %d, %H, %M, dan %S.

Michael Homer
sumber
Saya tidak ingin mengubah waktu
SHW
5
Tidak ada pilihan untuk melakukan itu. Anda dapat menggunakan date -s "2014-12-25 $(date +%H:%M:%S)"untuk mengubah tanggal dan menggunakan kembali waktu saat ini.
Michael Homer
datang ke sini dan jam serta menit cocok dengan waktu saat ini. - bagus
Alex2php
2
date: cannot set date: Invalid argument
Chris Stryczynski
@MichaelHomer @SHW dimungkinkan untuk mengubah hanya tanggal dengan perintah seperti date -s 2018-01-01. Seseorang membagikan ini dalam sebuah jawaban juga: superuser.com/questions/870068/…
baptx
42

Waktu sistem

Anda dapat menggunakan dateuntuk mengatur tanggal sistem. Implementasi GNU dari date(seperti yang ditemukan pada kebanyakan sistem berbasis Linux yang tidak tertanam) menerima banyak format berbeda untuk mengatur waktu, berikut beberapa contoh:

atur hanya tahun:

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

atur hanya bulan:

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

atur hanya hari:

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

atur semuanya:

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

Waktu perangkat keras

Sekarang waktu sistem sudah diatur, tetapi Anda mungkin ingin menyinkronkannya dengan jam perangkat keras:

Gunakan --showuntuk mencetak waktu perangkat keras:

hwclock --show

Anda dapat mengatur jam perangkat keras ke waktu sistem saat ini:

hwclock --systohc

Atau waktu sistem ke jam perangkat keras

hwclock --hctosys
kekacauan
sumber
2
Poin bonus untuk menggambarkan cara-cara yang tidak jelas Anda dapat mengatur tanggal dengan contoh dan untuk menunjukkan perbedaan antara "waktu sistem" dan "jam perangkat keras". Jawaban yang sangat membantu!
Mark Edington
3

Anda mengubah tanggal dengan dateperintah. Namun, perintah mengharapkan tanggal penuh sebagai argumen:

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

Untuk mengubah bagian dari tanggal, hasilkan tanggal saat ini dengan bagian tanggal yang ingin Anda ubah sebagai string dan yang lainnya sebagai variabel format tanggal. Kemudian berikan itu ke date -sperintah untuk mengaturnya:

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

mengubah bulan menjadi bulan ke 12 - Desember.

Format tanggal adalah:

  • %Y - Tahun
  • %m - Bulan
  • %d - Hari
  • %H - Jam
  • %M - Menit
garethTheRed
sumber
Saya mencoba mengubah tetapi tidak berubah: - $ sudo date --set = "2015-09-30 10: 05: 59.990" Rab 30 Sep 10:05:59 +0530 2015 $ date Kamis 23 Mei 15 15:10:37 +0530 2019
Vinod
2

Untuk yang seperti saya menjalankan ESXI 5.1, inilah jawaban sistem saya

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

Saya harus menggunakan perintah ESX tertentu sebagai gantinya:

esxcli system time set  -y 2016 -M 03 -d 23  -H 10 -m 05 -s 00
Balmipour
sumber
3
Terima kasih atas -1, tetapi maukah Anda menjelaskan mengapa ? Jika Anda mendapat jawaban yang lebih baik / lebih lengkap / lebih tepat, jangan ragu untuk berkomentar.
Balmipour
1

Perintah untuk mengubah tanggal sistem adalah date.

Ada dua cara untuk memanggil perintah tanggal (di Linux):

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

Mudah

Cara termudah adalah menggunakan date -skarena memungkinkan penggunaan tanggal relatif sederhana

 $ 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

Tanggal tidak berubah karena dijalankan dengan pengguna terbatas $. Jika Anda benar-benar ingin tanggalnya diubah, gunakan root ( #) atau sudo:

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

Jadi, mengubah bagian mana pun dari tanggal relatif semudah memberi nama:

 $ 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

Tanggal absolut sedikit lebih rumit karena mereka membutuhkan lebih detail:

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

Atau, Anda dapat menggunakan perintah tanggal dua kali:

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

ganti salah satu %dengan nilai yang valid dan tanggal akan ditetapkan (hanya sebagai root).

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

langsung

Bentuk tanggal panggilan kedua digunakan untuk langsung mengubah tanggal sistem.

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

Jadi:

 date 11230812              # MMDDhhmm

Akan menetapkan tanggal ke 23 November pukul 08.00 dan 12 menit.

BSD memiliki perintah yang sama tetapi format yang berbeda ([[[[cc] yy] mm] dd] HH] MM [.ss]).

Coba datesebagai pengguna terbatas untuk melihat apa yang akan dilakukannya (tanpa mengubah apa pun):

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

Atau, jika Anda benar-benar ingin mengubah tanggal, sebagai root:

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

Perhatikan bahwa layanan seperti NTP atau chrony akan terpengaruh. Dan, jika restart akan mengatur ulang tanggal kembali ke yang asli.

Tambahkan YY untuk mengatur tahun:

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

Atau CCYY untuk menetapkan tahun dan abad:

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

Saya menggunakan perintah tanggal dan format waktu yang tercantum di bawah ini untuk berhasil mengatur tanggal dari perintah shell terminal yang dilakukan pada Android Things yang menggunakan Linux Kernal.

tanggal 092615002017.00

MMDDHHMMYYYY.SS

MM - Bulan - 09

DD - Hari - 26

HH - Jam - 15

MM - Min - 00

YYYY - Tahun - 2017

.SS - detik - 00

Brook Oldre
sumber
Karena ini tidak bekerja dengan baik GNU atau BSD date, dapatkah Anda menambahkan lebih banyak info tentang sistem apa ini relevan dan bagaimana itu relevan dengan pertanyaan khusus ini.
Kusalananda