date: added to doc
This commit is contained in:
@@ -1,44 +1,243 @@
|
|||||||
|
Here is a cleaned up, expanded, and more production-ready version of your **date and time manipulation** document, written from a DevOps / Linux system administration perspective and keeping it concise and accurate.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
# Essential Date and Time Manipulation Commands
|
# Essential Date and Time Manipulation Commands
|
||||||
|
|
||||||
This document outlines common shell commands used for working with dates and times, essential for scripting, logging, and system administration tasks.
|
This document covers common shell commands for working with dates and times. These commands are frequently used in scripting, logging, monitoring, automation, and system administration tasks.
|
||||||
|
|
||||||
## 1. Creating Epoch Timestamps
|
---
|
||||||
|
|
||||||
The `date` command is versatile for generating timestamps in various formats, most notably the Unix epoch time (seconds since 1970-01-01 00:00:00 UTC).
|
## 1. The `date` Command Overview
|
||||||
|
|
||||||
### Command to Create Epoch Time (Milliseconds Precision)
|
The `date` command is a standard Unix/Linux utility used to:
|
||||||
|
|
||||||
This command converts a specific human-readable date and time into the epoch time, including milliseconds (`%3N`).
|
* Display the current system date and time
|
||||||
|
* Format timestamps
|
||||||
|
* Convert between human-readable dates and Unix epoch time
|
||||||
|
* Perform date arithmetic
|
||||||
|
|
||||||
|
Check system time:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
date
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Creating Epoch Timestamps
|
||||||
|
|
||||||
|
### Current Epoch Time (Seconds)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
date +%s
|
||||||
|
```
|
||||||
|
|
||||||
|
Output example:
|
||||||
|
|
||||||
|
```
|
||||||
|
1737154200
|
||||||
|
```
|
||||||
|
|
||||||
|
### Current Epoch Time (Milliseconds)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
date +%s%3N
|
||||||
|
```
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
|
||||||
|
* `%s` → seconds since Unix epoch
|
||||||
|
* `%3N` → milliseconds (GNU date only)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Convert Specific Date to Epoch (Milliseconds)
|
||||||
|
|
||||||
|
Convert a human-readable date to epoch time:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
date -d "2026-01-13 14:31:26" +%s%3N
|
date -d "2026-01-13 14:31:26" +%s%3N
|
||||||
```
|
```
|
||||||
|
|
||||||
## 2. Formatting Current Date and Time
|
Common use cases:
|
||||||
|
|
||||||
Displaying the current date and time in a readable or specific format.
|
* Log correlation
|
||||||
|
* API timestamps
|
||||||
|
* CI/CD pipeline timing
|
||||||
|
* Monitoring and alerting
|
||||||
|
|
||||||
| Command | Description | Example Output (Varies) |
|
---
|
||||||
| :--- | :--- | :--- |
|
|
||||||
| `date` | Default display | Wed Jan 17 10:30:00 UTC 2026 |
|
|
||||||
| `date +'%Y-%m-%d %H:%M:%S'` | Standard ISO format | 2026-01-17 10:30:00 |
|
|
||||||
| `date +%s` | Current epoch time (seconds) | 1737154200 |
|
|
||||||
|
|
||||||
## 3. Converting Epoch to Human Readable
|
## 3. Formatting Current Date and Time
|
||||||
|
|
||||||
Converting a numeric epoch timestamp back into a readable format.
|
Custom output formats are widely used in scripts and logs.
|
||||||
|
|
||||||
|
### Common Date Formats
|
||||||
|
|
||||||
|
| Command | Description | Example Output |
|
||||||
|
| --------------------------- | --------------------- | ---------------------------- |
|
||||||
|
| `date` | Default system format | Wed Jan 17 10:30:00 UTC 2026 |
|
||||||
|
| `date +'%Y-%m-%d %H:%M:%S'` | ISO-like format | 2026-01-17 10:30:00 |
|
||||||
|
| `date +'%Y-%m-%d'` | Date only | 2026-01-17 |
|
||||||
|
| `date +'%H:%M:%S'` | Time only | 10:30:00 |
|
||||||
|
| `date +%s` | Epoch (seconds) | 1737154200 |
|
||||||
|
|
||||||
|
### Common Format Specifiers
|
||||||
|
|
||||||
|
| Specifier | Meaning |
|
||||||
|
| --------- | --------------- |
|
||||||
|
| `%Y` | Year (4 digits) |
|
||||||
|
| `%m` | Month (01–12) |
|
||||||
|
| `%d` | Day (01–31) |
|
||||||
|
| `%H` | Hour (00–23) |
|
||||||
|
| `%M` | Minute (00–59) |
|
||||||
|
| `%S` | Second (00–60) |
|
||||||
|
| `%N` | Nanoseconds |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Converting Epoch to Human-Readable Time
|
||||||
|
|
||||||
|
Convert epoch seconds to readable format:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Assuming $EPOCH_TIME holds a value like 1737154200
|
date -d @1737154200
|
||||||
|
```
|
||||||
|
|
||||||
|
Using a variable:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
EPOCH_TIME=1737154200
|
||||||
date -d @"$EPOCH_TIME"
|
date -d @"$EPOCH_TIME"
|
||||||
```
|
```
|
||||||
|
|
||||||
## 4. Date Arithmetic
|
Formatted output:
|
||||||
|
|
||||||
Calculating dates relative to the current time.
|
```bash
|
||||||
|
date -d @"$EPOCH_TIME" '+%Y-%m-%d %H:%M:%S'
|
||||||
|
```
|
||||||
|
|
||||||
| Command | Description | Example Output (Varies) |
|
---
|
||||||
| :--- | :--- | :--- |
|
|
||||||
| `date -d "yesterday"` | The previous day | Tue Jan 16 ... |
|
## 5. Date Arithmetic
|
||||||
| `date -d "2 weeks ago"` | Two weeks prior | Thu Jan 03 ... |
|
|
||||||
| `date -d "+1 hour"` | One hour from now | Wed Jan 17 11:30:00 UTC 2026 |
|
GNU `date` supports flexible date calculations.
|
||||||
|
|
||||||
|
### Relative Dates
|
||||||
|
|
||||||
|
| Command | Description |
|
||||||
|
| ----------------------- | ----------------------- |
|
||||||
|
| `date -d "yesterday"` | Previous day |
|
||||||
|
| `date -d "tomorrow"` | Next day |
|
||||||
|
| `date -d "2 days ago"` | Two days in the past |
|
||||||
|
| `date -d "+1 hour"` | One hour from now |
|
||||||
|
| `date -d "+30 minutes"` | Thirty minutes from now |
|
||||||
|
| `date -d "+1 week"` | One week from now |
|
||||||
|
| `date -d "2 weeks ago"` | Two weeks ago |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Date Arithmetic with Formatting
|
||||||
|
|
||||||
|
Example: date 7 days from now:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
date -d "+7 days" '+%Y-%m-%d'
|
||||||
|
```
|
||||||
|
|
||||||
|
Example: timestamp 15 minutes ago (epoch):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
date -d "-15 minutes" +%s
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Working with UTC and Time Zones
|
||||||
|
|
||||||
|
Display current UTC time:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
date -u
|
||||||
|
```
|
||||||
|
|
||||||
|
Format UTC time:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
date -u '+%Y-%m-%d %H:%M:%S'
|
||||||
|
```
|
||||||
|
|
||||||
|
Convert date in a specific timezone:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
TZ=UTC date
|
||||||
|
TZ=America/New_York date
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Script-Friendly Usage Examples
|
||||||
|
|
||||||
|
Add timestamp to a log entry:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
echo "$(date '+%Y-%m-%d %H:%M:%S') Application started"
|
||||||
|
```
|
||||||
|
|
||||||
|
Generate a timestamped filename:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
backup_$(date +%Y%m%d_%H%M%S).tar.gz
|
||||||
|
```
|
||||||
|
|
||||||
|
Measure execution time:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
start=$(date +%s)
|
||||||
|
# command here
|
||||||
|
end=$(date +%s)
|
||||||
|
echo "Duration: $((end - start)) seconds"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. macOS Compatibility Notes
|
||||||
|
|
||||||
|
macOS uses BSD `date`, which differs from GNU `date`.
|
||||||
|
|
||||||
|
Example difference:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# GNU (Linux)
|
||||||
|
date -d "yesterday"
|
||||||
|
|
||||||
|
# BSD (macOS)
|
||||||
|
date -v -1d
|
||||||
|
```
|
||||||
|
|
||||||
|
Install GNU date on macOS:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
brew install coreutils
|
||||||
|
gdate -d "yesterday"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Best Practices
|
||||||
|
|
||||||
|
* Use UTC for logs and distributed systems
|
||||||
|
* Store timestamps as epoch values when possible
|
||||||
|
* Format dates only at display time
|
||||||
|
* Avoid locale-dependent formats in scripts
|
||||||
|
* Be aware of GNU vs BSD `date` differences
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
If you want, I can:
|
||||||
|
|
||||||
|
* Add cron-specific date examples
|
||||||
|
* Add log rotation and backup use cases
|
||||||
|
* Provide a quick-reference cheat sheet
|
||||||
|
* Add cross-platform date handling strategies
|
||||||
|
|||||||
Reference in New Issue
Block a user