none
Datum - TimeZone RRS feed

  • Frage


  • Hallo,
    kann mir bitte jemand sagen, wie ich diesen Code nach C# adapieren kann,
    damit das mit den Zeiten auch klappt.
    Ist ja mit den Zeiten teils nicht so einfach.
    Danke im Voraus.
    Viele Grüße Sandra

    CString ProductType::GetTimeZoneDifference()
    {
           TIME_ZONE_INFORMATION TimeZoneInfo;
           GetTimeZoneInformation(&TimeZoneInfo);
                        
           CString strTimeZoneDifference;
           strTimeZoneDifference.Format("%+03d:00", -1 * TimeZoneInfo.Bias / 60); 
        // -1* da Bias addiert 
       
           return strTimeZoneDifference;
    }

    Donnerstag, 27. April 2017 16:44

Antworten

  • Hallo Sandra,

    wenn ich es richtig erfasst habe, müsste es für deine Zwecke so aussehen:

    DateTime currentDate = DateTime.Now;
    TimeZone localZone = TimeZone.CurrentTimeZone;
    TimeSpan currentOffset = localZone.GetUtcOffset( currentDate );
    
    // Vor .net 4 -> enthält noch Sekunden
    string strUTCOffset = (currentOffset.Ticks < 0?"-":"") + currentOffset.ToString();
    // Ab .net 4
    strUTCOffset = (currentOffset.Ticks < 0?"-":"") + currentOffset.ToString("hh\\:mm");
    
    

    Falls es kein .net 4 ist, müsstest Du also ggfls. noch die Sekunden wegparsen.


    - Gruß Florian

    • Als Antwort markiert Sandra Bauer Freitag, 28. April 2017 16:24
    Freitag, 28. April 2017 08:15
  • Hallo Sandra,

    das ist aber mühsames Gefummel für eine Zeichenfolge..., Schon mal DateTimeOffset angeguckt... Nur so als Appetithappen:

                DateTime timeNow = DateTime.Now;
                DateTimeOffset offsetNow = new DateTimeOffset(timeNow);
    
                Console.WriteLine("{0} => {1}", offsetNow, offsetNow.Offset);

    in Offset steht das drin, was Du aufwändig verkomplizierst.

    P.S.: Produktionszeiten speichert (liefert) man in UTC, da entfällt solches [fehlerhaftes] Gerechne... Denn wer sagt, das die Zeit der produzierenden Fabrik in der gleichen Zeitzone wie der des berechnenden Computers liegt?!?

    • Als Antwort markiert Sandra Bauer Samstag, 29. April 2017 10:29
    Freitag, 28. April 2017 18:46
    Beantworter

Alle Antworten

  • Hallo Sandra,

    .NET stellt zu Zeitzonen einen kompletten Satz über die TimeZoneInfo - Klasse bereit.

    Siehe dazu auch: Konvertieren von Uhrzeiten zwischen Zeitzonen.

    Wobei ich mich frage, was in einem ProductType die Berechnung von Uhrzeiten verloren hat ;)

    Gruß Elmar

    Donnerstag, 27. April 2017 18:44
    Beantworter
  • CString ProductType::GetTimeZoneDifference()
    {
           TIME_ZONE_INFORMATION TimeZoneInfo;
           GetTimeZoneInformation(&TimeZoneInfo);
                        
           CString strTimeZoneDifference;
           strTimeZoneDifference.Format("%+03d:00", -1 * TimeZoneInfo.Bias / 60); 
        // -1* da Bias addiert 
       
           return strTimeZoneDifference;
    }

    Adaptiere den Code lieber nicht, denn er ist falsch. Der Format String ignoriert die Zeitzonen in denen der "Bias" (die Differenz zu UTC) halbe Stunden beinhaltet.

    - Gruß Florian


    • Bearbeitet Florian Haupt Freitag, 28. April 2017 08:17 Grammatik
    Freitag, 28. April 2017 07:04
  • Hallo Sandra,

    wenn ich es richtig erfasst habe, müsste es für deine Zwecke so aussehen:

    DateTime currentDate = DateTime.Now;
    TimeZone localZone = TimeZone.CurrentTimeZone;
    TimeSpan currentOffset = localZone.GetUtcOffset( currentDate );
    
    // Vor .net 4 -> enthält noch Sekunden
    string strUTCOffset = (currentOffset.Ticks < 0?"-":"") + currentOffset.ToString();
    // Ab .net 4
    strUTCOffset = (currentOffset.Ticks < 0?"-":"") + currentOffset.ToString("hh\\:mm");
    
    

    Falls es kein .net 4 ist, müsstest Du also ggfls. noch die Sekunden wegparsen.


    - Gruß Florian

    • Als Antwort markiert Sandra Bauer Freitag, 28. April 2017 16:24
    Freitag, 28. April 2017 08:15
  • Hallo,

    Danke an Alle.
    Klappte.
    Ich hab's so gelöst. + Zeichen war noch wichtig. Sieht gut aus, dachte evtl. gibt es halt ein direkter Aufruf, etc. ?

       @Elmar, das Produkterzeugungsdatum will man wissen.

    Viele Grüße Sandra
    private string GetTimeZoneDifference(DateTime currentDate)
    {
     TimeZone localZone = TimeZone.CurrentTimeZone;
     TimeSpan currentOffset = localZone.GetUtcOffset(currentDate);
     string dateUTCOffset = (currentOffset.Ticks < 0 ? "-" : "+") + currentOffset.ToString("hh\\:mm");
     return dateUTCOffset;
    } 
    DateTime time = DateTime.Now;
    // direkter Aufruf? var temp = DateTime.UtcNow.ToString("yyyy-MM-ddTHH\\:mm\\:ssZ");
    string timeBoard = time.ToString("yyyy-MM-ddTHH:mm:ss") + GetTimeZoneDifference(time);

    Freitag, 28. April 2017 16:24
  • Hallo Sandra,

    das ist aber mühsames Gefummel für eine Zeichenfolge..., Schon mal DateTimeOffset angeguckt... Nur so als Appetithappen:

                DateTime timeNow = DateTime.Now;
                DateTimeOffset offsetNow = new DateTimeOffset(timeNow);
    
                Console.WriteLine("{0} => {1}", offsetNow, offsetNow.Offset);

    in Offset steht das drin, was Du aufwändig verkomplizierst.

    P.S.: Produktionszeiten speichert (liefert) man in UTC, da entfällt solches [fehlerhaftes] Gerechne... Denn wer sagt, das die Zeit der produzierenden Fabrik in der gleichen Zeitzone wie der des berechnenden Computers liegt?!?

    • Als Antwort markiert Sandra Bauer Samstag, 29. April 2017 10:29
    Freitag, 28. April 2017 18:46
    Beantworter
  • P.S.: Produktionszeiten speichert (liefert) man in UTC, da entfällt solches [fehlerhaftes] Gerechne... Denn wer sagt, das die Zeit der produzierenden Fabrik in der gleichen Zeitzone wie der des berechnenden Computers liegt?!?

    Hallo Elmar, 

    ja Danke. Da halte ich mich kurz, der Kunde will das so. Der PC, der Server liegt sicher meist dort. Ausschließen kann man es heute nicht, keine Frage.

    Grüße Sandra

    Samstag, 29. April 2017 10:29