8
votes

Pourquoi ne pas convertir le temps correctement?

En 2013, le Royaume-Uni n'entraînera pas l'heure d'épargne du jour jusqu'au 31 mars.

toujours, TimezoneInfo.convertimetoutc code> soustrait une heure lorsque j'essaie de convertir un temps donné en UTC. Temps. P>

Pourquoi est-ce? Dois-je dire cette méthode que l'heure d'économie de jour n'est pas active? P>

var now = new DateTime(DateTime.Now.Ticks, DateTimeKind.Unspecified);
var convertedTime = TimeZoneInfo.ConvertTimeToUtc(now, TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard time"));
Console.WriteLine(convertedTime); // subtracts one hour, even though England time and GMT should be equal


6 commentaires

w. Standard Europe TimeZone n'est pas UTC + 01.00 ?


Vous devriez vraiment essayer Nodatime noda-time.blogspot.com par @jonskeet. Il devrait être inclus dans .NET comme une nouvelle API DateTime.


@Soner Gonul: Non, ce n'est pas. Pas quand ce n'est pas le temps d'économie de jour.


Ce fuseau horaire est UTC + 1 en ce moment maintenant, cependant.


@Matthew Watson: C'est +0000 UTC Selon ce site Web: WorldTimeserver.com/mobile/mobile_time_in_gb.aspx


Dupliqué possible de Différence entre UTC et GMT Time Standard dans .NET < / a>


3 Réponses :


2
votes

[REMARQUE: Cette réponse suppose que l'ordinateur exécutant le code est dans le fuseau horaire GMT]

C'est parce que "W. Europe Standard Time" n'est pas le même fusionné que UTC selon .net ( même si Il devrait être em>). c'est très étrange et semble être un bug dans les bibliothèques .net. strong> p>

En raison de cela, vous l'avez dit par inadvertance de convertir un temps en UTC et de le transmettre un UTC (c.-à-d. Temps GMT), mais a ensuite dit que le moment est dans "W. Europe Standard Time", qui est une heure devant UTC. P>

Si naturellement, le temps résultant dans une heure différente.

étape par étape: p> xxx pré>

Ceci définit maintenant code> à l'heure dans UTC. P>

TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard time")


11 commentaires

Si vous regardez l'un des convertisseurs en ligne et que vous essayez de convertir une heure du Royaume-Uni en UTC, vous verrez qu'elles sont identiques et qu'elles seront jusqu'au 31 mars. Est-ce que je manque quelque chose?


Êtes-vous au Royaume-Uni? Si vous êtes, votre code entraînera le temps d'être à l'heure.


"C'est parce que" W. Europe Standard Time "n'est pas le même fusionnement que UTC." Vraiment? Avez-vous une référence pour cela? Parce que Wikipedia n'est pas d'accord avec vous .


@svick: Oui. Je suis d'accord avec toi.


@svick mais mon registre dit le ci-contre . bizarre ..


@Sonergonul: intéressant. Cela pourrait avoir quelque chose à voir avec le bug.


Faites ceci: var Timezone = TimeZoneInfo.FindsystemTezoneByID ("W. EUROPE STANDARD TIME") puis regardez-le sous le débogueur. TIMZONE.BASEUTECOFFSET a la valeur 01:00:00 . Que cela soit correct ou mal est une question différente, mais c'est là que vient la différence. Notez également que le nom "magiquement" a changé en "W. Europe Daylight Time" - ce qui n'est pas transmis! Donc, les regards semblent suspicieusement une sorte de bug de bibliothèque.


@Matthewwatson Vous ne regardez-vous pas DayLightName Propriété? Parce que je ne vois pas ce que vous suggérez.


@Matthewwatson J'ai regardé Timezone.baseutcoffset sur le débogueur et je vois 00:00:00 . Quelque chose vraiment bizarre .. je soupçonne aussi un bug aussi ..


Il semble donc que Windows "W. L'EUROPE STANDARD TIME "n'est pas la même chose que" l'heure de l'Europe occidentale ". C'est vraiment déroutant.


@svick Yeah, sous Windows Registry W. EUROPE STANDARD TIME MATCHES AVEC Temps d'été de l'Europe occidentale sur Wikipedia pas avec temps européen occidental




-1
votes

Eh bien, les deux que nous avons sont du temps de l'Europe occidentale et l'été de l'Europe occidentale / jour de la lumière du jour n'est-ce pas? Il s'agissait peut-être qu'en entrant l'heure normale de l'Europe occidentale, vous correspondez automatiquement au plus proche, qui serait l'été ou la lumière du jour, que la norme soit répertoriée comme un fuseau horaire.

Incidemment, l'heure d'été britannique est la même chose que la lumière de la journée de l'Europe occidentale / l'heure d'été. Et Greenwich Mimetime correspond à l'heure de l'Europe occidentale - même fuseau horaire, mais la BST a commencé à être traité historiquement plus tôt, avant de faire correspondre les règles de l'UE en 2002. Effectivement, même nom système différent.


1 commentaires

Cela a déjà été répondu et la réponse marquée est correcte. Ils utilisaient simplement le mauvais numéro de fuseau horaire Windows.