Aktueller Standort: Startseite> Neueste Artikel> Wie kann ich das Problem lösen, dass die Funktionsinformationen TimeZone_identifiers_List keine Tageslichtsparenzeit enthalten?

Wie kann ich das Problem lösen, dass die Funktionsinformationen TimeZone_identifiers_List keine Tageslichtsparenzeit enthalten?

gitbox 2025-06-10

In PHP wird die Funktion TimeZone_identifiers_List () verwendet, um eine Liste aller bekannten Zeitzonenkennungen zu erhalten, die für Entwickler bei der Verarbeitungszeit- und Zeitzonenfunktion zweckmäßig verwendet werden kann. Diese Funktion gibt ein Array zurück, das Zeitzonennamen wie "Asien/Shanghai" , "Europa/London" usw. enthält. Viele Entwickler haben jedoch festgestellt, dass die direkte Zeitzonenliste, die direkt mit dieser Funktion erhalten wurde, nicht klar unterscheiden kann, ob sie die Zeitzone der Tageslichtsparzeit (DST) erhebliche Probleme enthält, die den Umgang mit der Saving -Zeitkonversion mit Taglicht retten.

In diesem Artikel wird die Hauptursache für dieses Problem ausführlich erläutert und wie programmatisch festgelegt wird, ob in der Zeitzone die Zeitsparungszeit bei Tageslicht unterstützt wird.


1. Problemhintergrund

TimeZone_identifiers_List () listet einfach den Namen der Zeitzone auf, und es wird nicht angegeben, ob die Zeitzone für Tageslichtsparenzeit aktiviert ist. Zum Beispiel wird "Europa/London" Tageslichtsparzeitanpassungen haben, während "Asien/Shanghai" dies nicht tun wird. Sie können die Liste, die er erhalten hat, nicht unterscheiden, indem Sie diese Funktion einfach verwenden.

Wenn Sie diese Zeitzonen -Zeichenfolgen direkt verwenden, um Tagesgeräte für Tageslicht zu fällen, kann dies zu Zeitfehlern im Programm führen, um die Sommerzeit oder ungültige Zeitberechnungen zu wechseln.


2. Lösungen

Um festzustellen, ob eine Zeitzone die Tageslichtsparenzeit unterstützt, ist es erforderlich, sich auf die Zusammenarbeit der DateTimezone -Klasse und der DateTime -Klasse von PHP zu stützen. Die Idee ist wie folgt:

  1. Für jede Zeitzonenkennung werden Zeitobjekte zu zwei Zeitpunkten erzeugt: Sommerzeit (wie Juli) und Winterzeit (wie Januar).

  2. Vergleichen Sie mit der Methode DateTimeZone :: GetOffset () , ob die UTC -Offsets zu diesen beiden Zeitpunkten gleich sind.

  3. Wenn die Offsets unterschiedlich sind, bedeutet dies, dass die Zeitzone Tageslicht spart Zeit unterstützt. Ansonsten wird es nicht unterstützt.


3. Beispielcode

Hier ist ein PHP -Code -Beispiel, das zeigt, wie eine Liste von Zeitzonen herausgefiltert werden kann, die Tageslichtsparenzeit unterstützen:

 <?php
$allTimezones = timezone_identifiers_list();

$dstTimezones = [];

foreach ($allTimezones as $timezone) {
    $tz = new DateTimeZone($timezone);

    // Nehmen Sie sich den Winter:1Mond1Tag
    $winter = new DateTime('2023-01-01', $tz);
    // Nehmen Sie sich Sommer:7Mond1Tag
    $summer = new DateTime('2023-07-01', $tz);

    // Holen Sie sich die Versatz Sekunden
    $winterOffset = $tz->getOffset($winter);
    $summerOffset = $tz->getOffset($summer);

    if ($winterOffset !== $summerOffset) {
        // Verschiedene Offsets,Zeigt an, dass es Sommerzeit gibt
        $dstTimezones[] = $timezone;
    }
}

// Ausgangszeitzonen, die Tageslichtsparenzeit unterstützen
echo "<pre>";
print_r($dstTimezones);
echo "</pre>";
?>

Dieser Code wird alle Zeitzonenkennungen ausgeben, die Tageslichtsparzeitanpassungen wie "Europa/London" , "America/New_york" usw. enthalten.


4. Zusammenfassung

  • timezone_identifiers_list () kann nur eine Zeitzonenliste erhalten und unterscheidet nicht, ob die Sparzeit bei Tageslicht unterstützt wird.

  • Durch den Vergleich von UTC -Offsets zu verschiedenen Zeitpunkten in derselben Zeitzone kann genau beurteilt werden, ob die Sparzeit bei Tageslicht aktiviert ist.

  • Wenn es um Zeitberechnungen und Präsentationen in Zeitzonen geht, kann eine angemessene Beurteilung des Tagesrettungszeit -Unterstützung viele Probleme der Zeitverwirrung vermeiden.

In diesem Artikel können Entwickler die Zeitverarbeitungslogik genauer steuern, um sicherzustellen, dass das Programm während des Tagesschalters für Tageslicht noch korrekt ausgeführt wird.