Update From Dev To Main #1
@@ -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
|
||||
|
||||
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
|
||||
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
|
||||
# Assuming $EPOCH_TIME holds a value like 1737154200
|
||||
date -d @1737154200
|
||||
```
|
||||
|
||||
Using a variable:
|
||||
|
||||
```bash
|
||||
EPOCH_TIME=1737154200
|
||||
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 ... |
|
||||
| `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 |
|
||||
---
|
||||
|
||||
## 5. Date Arithmetic
|
||||
|
||||
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