"📅 date & timedatectl — Time Management"

If you like this project, consider supporting me on Buy Me a Coffee ☕️


tags:

date and timedatectl are core Linux utilities for displaying, setting, and managing system time, dates, timezones, and NTP synchronization.

date (GNU coreutils) formats and sets the system clock from the command line. It supports relative date arithmetic (date -d "2 days ago"), Unix timestamp conversion, and custom output formats — essential for scripting, log filenames, and backup rotation.

timedatectl (part of systemd) is the modern tool for managing system time settings: timezone, NTP sync, and RTC (hardware clock). It replaces tzconfig and manual /etc/localtime symlink management.

Key differences / Ключевые различия:

[!NOTE] date -d is a GNU coreutils extension and does not work on macOS/BSD. Use gdate (from coreutils Homebrew package) on macOS. / date -d не работает на macOS/BSD — используйте gdate.


📚 Table of Contents


date Command

Display Date

date                                          # Default format / Формат по умолчанию
date '+%Y-%m-%d'                              # ISO date (YYYY-MM-DD) / ISO дата
date '+%Y-%m-%d %H:%M:%S'                     # Date and time / Дата и время
date '+%F %T'                                 # Same as above / То же что выше
date '+%s'                                    # Unix timestamp / Unix timestamp

UTC Time / UTC

date -u                                       # UTC time / UTC время
date -u '+%Y-%m-%dT%H:%M:%SZ'                 # ISO-8601 UTC / ISO-8601 UTC
date --utc '+%s'                              # Unix timestamp UTC / Unix timestamp UTC

Convert Timestamp

date -d '@1693152000'                         # Unix to date / Unix в дату
date -d '@1693152000' '+%Y-%m-%d %H:%M:%S'    # Unix to formatted / Unix в форматированную
date -d '2023-08-27 10:00:00' '+%s'           # Date to Unix / Дата в Unix

Relative Dates

date -d 'yesterday'                           # Yesterday / Вчера
date -d 'tomorrow'                            # Tomorrow / Завтра
date -d 'next Monday'                         # Next Monday / Следующий понедельник
date -d '2 days ago'                          # 2 days ago / 2 дня назад
date -d '+3 hours'                            # 3 hours from now / Через 3 часа
date -d '1 week ago'                          # 1 week ago / Неделю назад

Custom Formats

date '+%A, %B %d, %Y'                         # Monday, January 01, 2024
date '+%Y%m%d_%H%M%S'                         # Timestamp for filenames / Timestamp для имён файлов
date '+Week %V of %Y'                         # Week number / Номер недели
date '+%Z %z'                                 # Timezone / Часовой пояс

timedatectl

Show Status

timedatectl                                   # Show time/date/timezone / Показать время/дату/часовой пояс
timedatectl status                            # Same as above / То же что выше
timedatectl show                              # Machine-readable output / Машинно-читаемый вывод

Set Time

sudo timedatectl set-time '2024-01-01 12:00:00'  # Set date and time / Установить дату и время
sudo timedatectl set-time '12:00:00'          # Set time only / Установить только время

[!WARNING] Setting time manually will be overridden if NTP is enabled. Disable NTP first with sudo timedatectl set-ntp false. Установка времени вручную будет перезаписана если NTP включен. Сначала отключите NTP.

Set Timezone

timedatectl list-timezones                    # List available timezones / Список доступных часовых поясов
sudo timedatectl set-timezone Europe/London   # Set timezone / Установить часовой пояс
sudo timedatectl set-timezone UTC             # Set to UTC / Установить UTC

NTP / NTP

sudo timedatectl set-ntp true                 # Enable NTP / Включить NTP
sudo timedatectl set-ntp false                # Disable NTP / Отключить NTP
timedatectl timesync-status                   # NTP sync status / Статус синхронизации NTP

Timezones

Show Time in Different TZ

TZ=Europe/London date                         # London time / Лондонское время
TZ=America/New_York date                      # New York time / Нью-Йоркское время
TZ=Asia/Tokyo date                            # Tokyo time / Токийское время
TZ=UTC date                                   # UTC time / UTC время

List Timezones

timedatectl list-timezones                    # All timezones / Все часовые пояса
timedatectl list-timezones | grep Europe      # European timezones / Европейские часовые пояса
timedatectl list-timezones | grep America     # American timezones / Американские часовые пояса

Timezone Files

ls /usr/share/zoneinfo/                       # Timezone database / База данных часовых поясов
cat /etc/timezone                             # Current timezone (Debian) / Текущий часовой пояс (Debian)
readlink /etc/localtime                       # Current timezone (all distros) / Текущий часовой пояс

Format Specifiers

Common Format Specifiers

Specifier Description (EN / RU) Example
%Y Year (4 digits) / Год (4 цифры) 2024
%m Month (01–12) / Месяц (01–12) 03
%d Day (01–31) / День (01–31) 15
%H Hour (00–23) / Час (00–23) 14
%M Minute (00–59) / Минута (00–59) 30
%S Second (00–59) / Секунда (00–59) 45
%s Unix timestamp / Unix timestamp 1710510645
%Z Timezone name / Имя часового пояса CET
%z Timezone offset / Смещение +0100
%F ISO date (%Y-%m-%d) / ISO дата 2024-03-15
%T Time (%H:%M:%S) / Время 14:30:45
%A Full weekday / День недели Monday
%B Full month name / Название месяца March
%V Week number / Номер недели 11
%u Day of week (1=Mon, 7=Sun) / День недели 1
%j Day of year (001–366) / День года 075

Real-World Examples

Backup Filenames

# Create backup with timestamp
BACKUP_DATE=$(date '+%Y%m%d_%H%M%S')
tar -czf backup_${BACKUP_DATE}.tar.gz /data

# Create daily backup
BACKUP_DATE=$(date '+%Y-%m-%d')
tar -czf backup_${BACKUP_DATE}.tar.gz /data

Log Timestamps

# Log with timestamp
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Log message" >> /var/log/app.log

# ISO-8601 format
echo "[$(date -u '+%Y-%m-%dT%H:%M:%SZ')] UTC log" >> /var/log/app.log

Calculate Time Differences

# Start time
START=$(date '+%s')

# ... do work ...

# End time
END=$(date '+%s')
DIFF=$((END - START))
echo "Execution time: $DIFF seconds"

Convert Between Formats

# ISO to Unix / ISO
ISO_DATE="2023-08-27 10:00:00"
UNIX_TS=$(date -d "$ISO_DATE" '+%s')
echo "Unix timestamp: $UNIX_TS"

# Unix to ISO / Unix
UNIX_TS=1693152000
ISO_DATE=$(date -d "@$UNIX_TS" '+%Y-%m-%d %H:%M:%S')
echo "ISO date: $ISO_DATE"

Multi-Timezone Monitoring

#!/bin/bash
echo "=== Server Times ==="
echo "UTC:        $(TZ=UTC date '+%Y-%m-%d %H:%M:%S %Z')"
echo "New York:   $(TZ=America/New_York date '+%Y-%m-%d %H:%M:%S %Z')"
echo "London:     $(TZ=Europe/London date '+%Y-%m-%d %H:%M:%S %Z')"
echo "Tokyo:      $(TZ=Asia/Tokyo date '+%Y-%m-%d %H:%M:%S %Z')"

Date Arithmetic

# First day of month
date -d "$(date '+%Y-%m-01')"

# Last day of month
date -d "$(date '+%Y-%m-01') +1 month -1 day"

# 30 days ago / 30
date -d '30 days ago' '+%Y-%m-%d'

# Next Sunday
date -d 'next Sunday'

Cron Job Logging

# Log execution time
0 2 * * * echo "Backup started at $(date '+\%Y-\%m-\%d \%H:\%M:\%S')" >> /var/log/backup.log && /usr/local/bin/backup.sh

Troubleshooting

Check NTP Synchronization

# Check NTP status
timedatectl timesync-status

# Check chronyd
chronyc tracking

# Check systemd-timesyncd
systemctl status systemd-timesyncd

Fix Time Drift

# Disable NTP
sudo timedatectl set-ntp false

# Set correct time
sudo timedatectl set-time '2024-01-01 12:00:00'

# Re-enable NTP
sudo timedatectl set-ntp true

Useful One-Liners

date '+%Y%m%d%H%M%S'                          # Timestamp filename / Timestamp имя файла
date '+%Y-W%V'                                # Year and week number / Год и номер недели
date -d "@$(($(date '+%s') - 86400))"         # Yesterday / Вчера
echo $(($(date '+%s') / 86400))               # Days since epoch / Дней с начала epoch

💡 Best Practices

[!NOTE] Timezone changes may require service restart to take effect. Always verify with timedatectl after changes. / Изменения часового пояса могут потребовать рестарта сервисов.


On this page

linux date & timedatectl — Time Management 📚 Table of Contents date Command Display Date UTC Time / UTC Convert Timestamp Relative Dates Custom Formats timedatectl Show Status Set Time Set Timezone NTP / NTP Timezones Show Time in Different TZ List Timezones Timezone Files Format Specifiers Common Format Specifiers Real-World Examples Backup Filenames Log Timestamps Calculate Time Differences Convert Between Formats Multi-Timezone Monitoring Date Arithmetic Cron Job Logging Troubleshooting Check NTP Synchronization Fix Time Drift Useful One-Liners 💡 Best Practices Documentation Links