Kommt drauf an aus welcher Perspektive du das siehst. Ich hatte ja erwähnt das die .Format() Funktion historisch bedingt keiner unterscheidung von zeitzonen kennt bzw. einfach nicht eine Unterscheidung zwischen lokaler und Weltzeit macht. D.h. egal welche Zeitdefinition du der Format() funktion gibst, sie wird die Zeit in lokale Zeit umwandeln und deshalb steht in deinem Beispiel auch 19 Uhr wohingegen Hour() 17 ausgibt weil "currenttime" eben definiert ist als die aktuelle zeit in UTC zeit und das ist nunmal localtime - 2 stunden im moment. Und das deine "timestring" zeile auch 19:24:18 statt 17:24:18 anzeigt ist dem geschuldet, das hier intern eben die exakt selbe Format() funktion aufgerufen wird und diese wie erwähnt eben keine unterscheidung von UTC vs. lokaler Zeit kennt und die Zeit die ihr gegeben wird immer in die lokale Zeit umwandelt.alchy hat geschrieben: ↑30.04.2020, 19:42ergibt:Code: Alles auswählen
WriteLine ("\t\t\tcurrenttime\t\tlocaltime") WriteLine ("timestring:\t\t"#currenttime # "\t" # localtime); WriteLine ("integer:\t\t"#currenttime.ToInteger () # "\t\t" # localtime.ToInteger () ); WriteLine (".Hour():\t\t"#currenttime.Hour ()#":" # currenttime.Minute ()# ":" # currenttime.Second () # "\t\t" #localtime.Hour () #":" # currenttime.Minute ()# ":" # currenttime.Second () ); WriteLine (".Format():\t\t"#currenttime.Format("%H")#":" # currenttime.Format("%M")# ":" # currenttime.Format("%S") # "\t\t" + localtime.Format("%H") #":" # currenttime.Format("%M")# ":" # currenttime.Format("%S") ); WriteLine ("Sommerzeit:\t\t"#currenttime.IsDST () # "\t\t\t" # localtime.IsDST () ); WriteLine ("Localzeit:\t\t"#currenttime.IsLocalTime () # "\t\t\t" # localtime.IsLocalTime () );
So wie die Flags sitzen, sollte nun deiner Meinung nach in der currenttimespalte 3x 17 oder 19 Uhr stehen oder ein Mischmasch ?Code: Alles auswählen
currenttime localtime timestring: 2020-04-30 19:24:18 2020-04-30 19:24:18 .Tointeger: 1588267458 1588267458 Methode Hour(): 17 Uhr+ 19 Uhr+ Methode Format(): 19 Uhr+ 19 Uhr+ Sommerzeit Flag: 0 1 Localzeit Flag: 0 1
Und das wird hoffentlich noch klarer wenn du jetzt einfach mal folgende Zeile ausprobierst:
Code: Alles auswählen
WriteLine (".Format():\t\t"#currenttime.Format("%c %Z")# "\t\t" + # currenttime.Format("%c %Z") );
Code: Alles auswählen
.Format(): Fri May 1 00:00:48 2020 CEST Fri May 1 00:00:48 2020 CEST
Nun könnte man natürlich argumentieren das Format() doch bitte (wenn die Zeit doch schon in Weltzeit gehalten wird) doch bitte auch hier die zeit in UTC ausgeben sollte. Das ist aber wie gesagt historisch so und da müsste man erst einmal schauen wie man das implementieren kann das es auch keine Nebeneffekte hat. Und dann muss man sich aber auch die frage nach dem "Warum" gefallen lassen, denn bis auf diesen Fall hier ist mir bis jetzt noch kein weiterer Fall oder Wunsch bekannt der Format() Funktion doch diese Unterscheidung beizubringen. Und dann müsste man auch schauen ob es nicht auch irgendwie Sinn ergibt das man Format() auch gleich zum Umwandeln/Ausgeben in der lokalen Zeit bewegen kann.
Hoffe damit ist es etwas klarer.