Zeitzonen
Konzept
Schedule-Bot unterstuetzt individuelle Zeitzonen pro Spieler. Alle Zeiten werden intern in der Bot-Zeitzone (Standard: Europe/Berlin) gespeichert und bei der Anzeige konvertiert.
Architektur
Spieler-Eingabe (User-TZ)
│
▼
Konvertierung → Bot-Zeitzone
│
▼
Datenbank (Bot-TZ)
│
├──▶ Discord: <t:TIMESTAMP:t> (auto-lokal)
└──▶ Dashboard: TimezoneProvider (User-TZ)Spieler-Zeitzone setzen
Via Discord
/set-timezone timezone:America/New_YorkAutocomplete-Vorschlaege fuer gaengige Zeitzonen werden angeboten.
Entfernen
/remove-timezoneDanach wird die Bot-Zeitzone verwendet.
Speicherung
Die Zeitzone wird in user_mappings.user_timezone als IANA-String gespeichert:
Europe/BerlinAmerica/New_YorkAsia/Tokyo- etc.
Konvertierungslogik
Backend (timezoneConverter.ts)
// Validierung
isValidTimezone('Europe/Berlin') // true
isValidTimezone('Invalid/Zone') // false
// Konvertierung
convertTimeInTimezone('14:00', 'America/New_York', 'Europe/Berlin')
// → '20:00' (im Winter, +6h)
// Alle Zeitzonen
getSupportedTimezones() // Array aller IANA-Zeitzonen
// Abkuerzung
getTimezoneAbbreviation('Europe/Berlin') // 'CET' oder 'CEST'Frontend (lib/timezone.ts)
// Einzelne Zeit konvertieren
convertTime('14:00', 'Europe/Berlin', 'America/New_York')
// Zeitbereich konvertieren
convertTimeRange('14:00-20:00', 'Europe/Berlin', 'America/New_York')
// Abkuerzung
getTimezoneAbbr('Europe/Berlin') // 'CET'TimezoneProvider (Dashboard)
Das Dashboard verwendet einen React Context fuer globale Zeitzonen-Verwaltung:
const { userTimezone, botTimezone, botTimezoneLoaded } = useTimezone();Funktionsweise
- User-Zeitzone: Aus localStorage oder Browser-Erkennung
- Bot-Zeitzone: Abfrage von
/api/settingsbeim Laden - Auto-Refresh: Bot-Zeitzone wird alle 5 Minuten aktualisiert
- Version-Counter: Inkrementiert bei Aenderungen (fuer Dependency-Tracking)
Verwendung in Komponenten
function ScheduleView() {
const { userTimezone, botTimezone } = useTimezone();
// Angezeigte Zeit = konvertiert von Bot-TZ zu User-TZ
const localTime = convertTimeRange(
schedule.availability,
botTimezone,
userTimezone
);
// Gespeicherte Zeit = konvertiert von User-TZ zu Bot-TZ
const botTime = convertTimeRange(
userInput,
userTimezone,
botTimezone
);
}Discord-Timestamps
In Discord werden Unix-Timestamps fuer automatische lokale Zeitanzeige verwendet:
// Discord Timestamp Format
`<t:${unixTimestamp}:t>` // Kurze Zeit (14:00)
`<t:${unixTimestamp}:T>` // Lange Zeit (14:00:00)
`<t:${unixTimestamp}:d>` // Kurzes Datum (27.03.2026)
`<t:${unixTimestamp}:D>` // Langes Datum (27. Maerz 2026)
`<t:${unixTimestamp}:f>` // Datum + Zeit
`<t:${unixTimestamp}:R>` // Relativ ("in 3 Stunden")Discord konvertiert diese automatisch in die lokale Zeitzone des Betrachters - keine manuelle Konvertierung noetig.
Wichtige Hinweise
Sommerzeit / Winterzeit
Die Konvertierung beruecksichtigt automatisch Sommer- und Winterzeit (DST), da IANA-Zeitzonen verwendet werden. Europe/Berlin wechselt automatisch zwischen CET (+1) und CEST (+2).
Standard-Zeitzone
Wenn ein Spieler keine Zeitzone gesetzt hat, wird die Bot-Zeitzone (Europe/Berlin) angenommen. Es wird empfohlen, dass alle Spieler ihre Zeitzone setzen.
