export function formatDateTime(raw: unknown): string { const d = toDate(raw) if (!d) return "-" const Y = d.getFullYear() const M = String(d.getMonth() + 1).padStart(2, "0") const D = String(d.getDate()).padStart(2, "0") const h = String(d.getHours()).padStart(2, "0") const m = String(d.getMinutes()).padStart(2, "0") return `${Y}-${M}-${D} ${h}:${m}` } export function formatDate(raw: unknown): string { const d = toDate(raw) if (!d) return "-" return d.toLocaleDateString() } function toDate(raw: unknown): Date | null { if (raw == null) return null if (raw instanceof Date) return isNaN(raw.getTime()) ? null : raw if (typeof raw === "string") { const d = new Date(raw) return isNaN(d.getTime()) ? null : d } if (typeof raw === "number") { const d = new Date(raw) return isNaN(d.getTime()) ? null : d } // Java LocalDateTime array: [year, month, day, hour, minute, second, nanos] if (Array.isArray(raw) && raw.length >= 3) { const [y, mo, d, h = 0, mi = 0, s = 0] = raw return new Date(Number(y), Number(mo) - 1, Number(d), Number(h), Number(mi), Number(s)) } if (typeof raw === "object") { const obj = raw as Record const y = Number(obj.year ?? 0) const mo = Number(obj.monthValue ?? obj.month ?? 1) const d = Number(obj.dayOfMonth ?? obj.day ?? 1) const h = Number(obj.hour ?? 0) const mi = Number(obj.minute ?? 0) const s = Number(obj.second ?? 0) if (!isNaN(y) && !isNaN(mo) && !isNaN(d)) { return new Date(y, mo - 1, d, h, mi, s) } } return null }