[gelöst] QDateTime für 29. März 2009

Alles rund um die Programmierung mit Qt
Antworten
PANGAEA
Beiträge: 23
Registriert: 16. Januar 2005 18:10
Wohnort: Bremerhaven
Kontaktdaten:

[gelöst] QDateTime für 29. März 2009

Beitrag von PANGAEA »

Hallo,

folgendes Problem bereitet mir erhebliche Kopfschmerzen

Code: Alles auswählen

  QDateTime dt = QDateTime( QDate( 2009, 3, 1 ) );

  dt.setDate( QDate( 2009, 3, 29 ) );
  dt.setTime( QTime( 0, 0, 0 ) );
  dt = dt.addSecs( 120*60 );

  QString OutputStr = dt.toString( "yyyy-MM-ddThh:mm" );

liefert nicht etwas 2009-03-29T02:00 sondern 2009-03-29T03:00 !!!
Für 119*60 wird noch richtig 2009-03-29T01:59 ausgegeben. Dieser Bug gilt dann für den ganzen 2009-03-29. Für 2009-03-30 liefert addSecs( 120*60 ) dann wieder die richtige Uhrzeit. Für 2008-03-29 liefert die gleiche Routine das richtige Ergebnis!

Mir scheint, ich bin da auf einen Bug in Qt 4.5.1 gestossen, was meint Ihr?

Genervte Grüße
Rainer
Zuletzt geändert von PANGAEA am 29. April 2009 22:41, insgesamt 1-mal geändert.
chrislo1976
Beiträge: 105
Registriert: 24. Februar 2008 09:45

Beitrag von chrislo1976 »

Moin!

Hm... 29.3.2009, da war doch was!?
Ach ja, an diesem Tag war die Zeitumstellung auf Sommerzeit! Und da wird doch von 2 Uhr auf 3 Uhr vorgestellt.

Das könnte doch dein Problem erklären!
Falls dem wirklich so ist und du diesen Umstand umgehen/berücksichtigen musst, gibt es Formeln mit denen man den Zeitpunkt der Zeitumstellung berechnen kann...

Gruß,
Christian
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Du hast jetzt nicht per Zufall genau den Zeitpunkt der Sommerzeitumstellung erwischt, oder? :lol:
PANGAEA
Beiträge: 23
Registriert: 16. Januar 2005 18:10
Wohnort: Bremerhaven
Kontaktdaten:

Beitrag von PANGAEA »

Ja, da hat die Sommerzeit zugeschlagen.

So geht es:

Code: Alles auswählen

statt:
dt = dt.addSecs( i_Minute*60 );

nun besser so:
dt = dt.addSecs( i_Minute*60 ).toUTC();

Damit ist dann auch am Tag der Sommerzeitumstellung nach 120 Minuten nicht 3h sondern 2h.

Herzlich Dank für Eure Antworten
Rainer
Antworten