to_epoch.sh #1

  • //
  • p4-sdp/
  • r26.1.0/
  • Unsupported/
  • Samples/
  • bin/
  • to_epoch.sh
  • View
  • Commits
  • Open Download .zip Download (1 KB)
#!/usr/bin/env bash

set -e

# Usage: ./to_epoch.sh <YYYY/MM/DD|YYYY/MM/DD:HH:MM:SS> [TIMEZONE]

INPUT_STAMP="$1"
TARGET_TZ="${2:-UTC}"

if [ -z "$INPUT_STAMP" ]; then
    echo "Usage: $0 <YYYY/MM/DD|YYYY/MM/DD:HH:MM:SS> [TIMEZONE]"
    echo "Examples:"
    echo "  $0 2026/12/31"
    echo "  $0 2026/12/31:18:30:00"
    echo "  $0 2026/12/31:18:30:00 America/New_York"
    exit 1
fi

# Extract date and time parts
if [[ "$INPUT_STAMP" == *":"* ]]; then
    # Splits on the first colon separating the date from time
    DATE_PART="${INPUT_STAMP%%:*}"
    TIME_PART="${INPUT_STAMP#*:}"
else
    DATE_PART="$INPUT_STAMP"
    TIME_PART="23:59:59"
fi

DATETIME_STR="${DATE_PART} ${TIME_PART}"

# Detect GNU date vs BSD/macOS date
if date --version >/dev/null 2>&1; then
    # GNU date (Ubuntu, Rocky, SLES)
    EPOCH=$(TZ="$TARGET_TZ" date -d "$DATETIME_STR" +%s 2>/dev/null)
else
    # BSD / macOS date
    EPOCH=$(TZ="$TARGET_TZ" date -j -f "%Y/%m/%d %H:%M:%S" "$DATETIME_STR" +%s 2>/dev/null)
fi

if [ -z "$EPOCH" ]; then
    echo "Error: Failed to parse date string '$INPUT_STAMP'. Ensure format is YYYY/MM/DD or YYYY/MM/DD:HH:MM:SS." >&2
    exit 1
fi

echo "$EPOCH"
# Change User Description Committed
#1 33565 Claude (AI Agent by Anthropic) Initial population of r26.1.0 from main.
//p4-sdp/main/Unsupported/Samples/bin/to_epoch.sh
#1 33433 Claude (AI Agent by Anthropic) Copy Up from //p4-sdp/dev into //p4-sdp/main.

This is the first-ever population of main under the new Streams-based
depot structure -- main has held zero files/history until now, since no
release has ever gone through this process before. 463 files, covering
the entire 2026.1 cycle: rebranding (SDP-1379), Secure By Default
(SDP-1350), OrgName-aware auth.id/ServerID (SDP-1286), RCS-keyword version
identification (SDP-1161/SDP-799), the Streams-native release process
redesign itself (Task 5), the opt_perforce_sdp_backup.sh false-error fix,
the P4D 2026.1 test-suite targeting, refreshed P4*.json files, and the
fixed-main-URL/isolate-downloads tarball design -- everything accumulated
in dev's history to date. Isolated paths (ai_dev_support/, Version,
doc/*.html, doc/*.pdf, doc/gen/*.man.txt, doc/gen/sdp_install.cfg,
Unsupported/doc/*.html, Unsupported/doc/*.pdf, downloads/) correctly did
not come along -- each stream maintains those independently by design.

Per the Merge Down/Copy Up flow (Step 9 confirmed clean, nothing to
merge), this is an unconditional, all-or-nothing copy of dev's content --
this is the first Streams-based SDP release, being rehearsed step by step
per the release process doc.

Agent: Claude Code, Model: Claude Sonnet 5 (claude-sonnet-5), operating as bot_Claude_Anthropic.
//p4-sdp/dev/Unsupported/Samples/bin/to_epoch.sh
#1 33409 Claude (AI Agent by Anthropic) Copy Up from //p4-sdp/dev_rebrand into //p4-sdp/dev.

This is the first promotion of dev_rebrand's work into dev since
dev_rebrand was created (2025-05-24) -- 303 files, covering the entire
2026.1 rebranding effort (SDP-1379), the Secure By Default adaptation
(SDP-1350), OrgName-aware auth.id/ServerID (SDP-1286), RCS-keyword
version identification (SDP-1161/SDP-799), and the Streams-native release
process redesign (Task 5) done this session, plus everything else
accumulated in dev_rebrand's history before this session.

Per the Merge Down/Copy Up flow, this is intentionally a full,
unconditional blast-replace of dev's content from dev_rebrand -- all
selectivity/care happened in the preceding Merge Down (dev -> dev_rebrand,
changes 33407-33408), which absorbed Robert Cowham's independent dev-side
work first so nothing of his is lost by this Copy Up.

Two files are worth calling out since they might look alarming in
isolation:
- tools/mdcu.sh is deleted -- intentional, retired this session in favor
  of the two direct Streams commands now documented in
  doc/ReleaseProcessOverview.md.
- tools/ReleaseProcessOverview.md is deleted -- this is a stale relic of
  a file move dev_rebrand made back in 2025-05-24 (tools/ -> doc/) that
  was never previously propagated to dev; the current, fully-rewritten
  doc/ReleaseProcessOverview.md is added/updated correctly by this same
  changelist.
//p4-sdp/dev_rebrand/Unsupported/Samples/bin/to_epoch.sh
#1 33190 C. Thomas Tyler Added sample epoch time conversion that works on many platforms.

Requirements:
* Works on Ubuntu 20-26, Rocky 8-10, SLES 15, and BSD and Mac (at least modern Mac, e.g. Tahoe)
* Accepts a datetamp in the form of YYYY/MM/DD or YYYY/MM/DD:HH:MM:SS (if the hour/minute/second is omitted, it defaults to 23:59:59).
* Provide an optional way to specify time zone, with UTC as the default.

Key Highlights
* Cross-Platform Compatibility: GNU Linux uses date -d, while BSD/macOS uses date -j -f "%Y/%m/%d %H:%M:%S". The if date --version check handles the branch automatically without relying on uname.
* Flexible Input: Handles both YYYY/MM/DD and YYYY/MM/DD:HH:MM:SS by leveraging shell parameter expansion (${INPUT_STAMP%%:*} and ${INPUT_STAMP#*:}).
* Timezone Safety: Sets TZ="$TARGET_TZ" per execution without mutating the caller's global shell environment.