Display current date and time without punctuation
Categories:
Displaying Current Date and Time Without Punctuation in Bash

Learn how to format the current date and time in Bash, removing all punctuation for clean, script-friendly output.
When working with shell scripts, you often need to capture the current date and time. While the date
command is powerful and versatile, its default output includes various punctuation marks (colons, hyphens, spaces) that can be problematic for filenames, log entries, or unique identifiers. This article will guide you through several methods to obtain a clean, punctuation-free date and time string in Bash, suitable for a wide range of scripting needs.
Understanding the date
Command's Formatting Options
The date
command in Bash allows for extensive customization of its output using format specifiers. Each specifier represents a different part of the date or time. By carefully selecting and combining these specifiers, you can construct a string that meets your exact requirements, including omitting punctuation. The key is to understand which specifiers provide the numerical or textual components you need and then concatenate them directly.
date +%Y%m%d%H%M%S
Basic format string for year, month, day, hour, minute, and second without punctuation.
date
command's man page by typing man date
in your terminal. Look for the section on 'FORMAT CONTROLS'.Constructing a Punctuation-Free Timestamp
To achieve a completely punctuation-free output, you need to concatenate the format specifiers directly without any intervening characters. Common specifiers include %Y
for the full year, %m
for the month, %d
for the day, %H
for the hour (24-hour format), %M
for the minute, and %S
for the second. You can also include milliseconds or nanoseconds if higher precision is required.
# Example 1: YYYYMMDDHHMMSS
CURRENT_DATETIME=$(date +%Y%m%d%H%M%S)
echo "Current datetime: $CURRENT_DATETIME"
# Example 2: Including milliseconds (requires GNU date, common on Linux)
CURRENT_DATETIME_MS=$(date +%Y%m%d%H%M%S%3N)
echo "Current datetime with milliseconds: $CURRENT_DATETIME_MS"
# Example 3: Including nanoseconds (requires GNU date)
CURRENT_DATETIME_NS=$(date +%Y%m%d%H%M%S%N)
echo "Current datetime with nanoseconds: $CURRENT_DATETIME_NS"
Various examples of generating punctuation-free date and time strings.
flowchart TD A[Start] --> B{"Need Punctuation-Free Date/Time?"} B -- Yes --> C[Use `date` command] C --> D[Select Format Specifiers (e.g., %Y, %m, %d, %H, %M, %S)] D --> E[Concatenate Specifiers Directly] E --> F[Execute: `date +%Y%m%d%H%M%S`] F --> G[Output: YYYYMMDDHHMMSS] G --> H[End] B -- No --> I[Use Default `date` or other formats] I --> H
Workflow for generating a punctuation-free date and time string.
Handling Time Zones and Portability
By default, date
will use your system's local time zone. If you need a UTC (Coordinated Universal Time) timestamp, you can use the -u
or --utc
option. This is often preferred for logging and data storage to ensure consistency across different systems and regions. While the format specifiers are largely standard, some advanced options like %N
(nanoseconds) are specific to GNU date
(found on Linux systems) and might not be available on BSD/macOS systems. For maximum portability, stick to %Y%m%d%H%M%S
.
# Get current UTC datetime without punctuation
UTC_DATETIME=$(date -u +%Y%m%d%H%M%S)
echo "UTC datetime: $UTC_DATETIME"
Generating a UTC timestamp without punctuation.
date
(Linux) and BSD date
(macOS, FreeBSD). While basic format specifiers are consistent, advanced ones like %N
for nanoseconds are GNU-specific. For cross-platform scripts, consider using printf
with $(date +%s)
for epoch time and then formatting it, or stick to basic date
specifiers.1. Open your terminal
Launch your preferred terminal application (e.g., Bash, Zsh).
2. Construct the date
command
Combine the desired format specifiers without any separators. For example, +%Y%m%d%H%M%S
for YearMonthDayHourMinuteSecond.
3. Execute the command
Type the command and press Enter. The output will be the current date and time without any punctuation.
4. Store in a variable (optional)
To use the output in a script, assign it to a variable: MY_TIMESTAMP=$(date +%Y%m%d%H%M%S)
.