Files
wehub-resource-sync f99010fae1
Desktop Artifacts / Desktop Build (Linux) (push) Waiting to run
Desktop Artifacts / Desktop Build (Windows) (push) Waiting to run
Desktop Artifacts / Desktop Build (Linux (arm64)) (push) Waiting to run
Desktop Artifacts (macOS) / Desktop Build (macOS (aarch64)) (push) Waiting to run
Desktop Artifacts (macOS) / Desktop Build (macOS (x86_64)) (push) Waiting to run
CI / lint (push) Failing after 1s
CI / frontend (push) Failing after 1s
CI / scripts (push) Failing after 1s
CI / Go Test (ubuntu-latest) (push) Failing after 0s
CI / frontend-node-25 (push) Failing after 1s
CI / docs (push) Failing after 0s
CI / coverage (push) Failing after 0s
CI / e2e (push) Failing after 0s
Docker / build-and-push (push) Failing after 1s
CI / integration (push) Failing after 4m43s
CI / Go Test (windows-latest) (push) Has been cancelled
CI / Desktop Unit Tests (Windows) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:30:36 +08:00

44 lines
889 B
Go

package parser
import (
"log"
"time"
)
// timestampLayouts lists accepted timestamp formats in priority
// order.
var timestampLayouts = []string{
time.RFC3339Nano,
time.RFC3339,
"2006-01-02T15:04:05.000000",
"2006-01-02T15:04:05.000Z",
"2006-01-02T15:04:05Z",
"2006-01-02T15:04:05.000-07:00",
"2006-01-02T15:04:05-07:00",
"2006-01-02 15:04:05",
}
// parseTimestamp parses a raw timestamp string into a time.Time.
// Returns zero time if the string is empty or unparseable.
func parseTimestamp(ts string) time.Time {
if ts == "" {
return time.Time{}
}
for _, layout := range timestampLayouts {
if t, err := time.Parse(layout, ts); err == nil {
return t.UTC()
}
}
return time.Time{}
}
func logParseError(ts string) {
const maxLen = 100
if len(ts) > maxLen {
ts = ts[:maxLen] + "..."
}
log.Printf(
"unparseable timestamp %q: no matching layout", ts,
)
}