Autor |
Beitrag |
Chiyoko
      
Beiträge: 298
Erhaltene Danke: 8
Win 98, Win Xp, Win 10
C# / C (VS 2019)
|
Verfasst: Sa 29.05.10 12:09
Huhu,
Ich habe mir eine Uhr programmiert, welche Weltzeiten zur Auswahl stellt.
Nach einigen versuchen klappte das ganz gut.
Jetzt frage ich mich aber folgendes:
1) Sommer / Winterzeit...(da bin ich noch am suchen)
2) Wenn ich zum Beispiel auf China umstelle, ist es normalerweise GMT +7.
Allerdings steht Timezoneinfo immer auf 0.Das heisst dadurch das wir jetzt
Sommerzeit haben, muss man eine Stunde wegrechnen (und die GMT +1 Zeit auch).
Jetzt ist es in China aber normalerweise +7h von Deutschland aus gesehen.
Wie koennte man das (mal abgesehen von sommer/winterzeit) erreichen, das die 1h dazugerechnet wird(auch von anderen laendern aus)?
D.h. wenn wir jetzt hier 12:00uhr mittags haben, ist es laut der Uhr, 17Uhr in China.
Danke.
Sommer/Winterzeit laesst sich leicht regeln,...soll ich dann + bzw - eine stunde rechnen?
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| DateTime dt = DateTime.Parse(data_shanghai); bool dtttt = dt.Equals(TimeZone.CurrentTimeZone.GetDaylightChanges(dt.Year).Start); if (dtttt == true) { MessageBox.Show(dt + " ist Sommerzeit"); return; } else { MessageBox.Show(dt + " ist keine Sommerzeit"); return; } |
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77:
| private void Worldtimer(object sender, EventArgs e) { string displayShanghai = "(GMT+07:00) China/Shanghai Time"; string displayBerlin = "(GMT+01:00) Deutschland/Berlin Time"; string displayLondon = "(GMT+00:00) England/London Time"; string displaySeoul = "(GMT+06:00) Korea/Seoul Time"; string displaySydney = "(GMT+11:00) Australien/Sydney Time"; string displayNewYork = "(GMT-05:00) America/New York Time";
string standard_shanghai = "Shanghai Time"; string standard_berlin = "Berlin Time"; string standard_london = "London Time"; string standard_seoul = "Seoul Time"; string standard_sydney = "Sydney Time"; string standard_newyork = "New York Time";
TimeSpan shanghai_offset = new TimeSpan(07, 00, 00); TimeSpan berlin_offset = new TimeSpan(01, 00, 00); TimeSpan london_offset = new TimeSpan(00, 00, 00); TimeSpan seoul_offset = new TimeSpan(06, 00, 00); TimeSpan sydney_offset = new TimeSpan(11, 00, 00); TimeSpan newyork_offset = new TimeSpan(-05, 00, 00);
TimeZoneInfo str_Shanghai = TimeZoneInfo.CreateCustomTimeZone(standard_shanghai, shanghai_offset, displayShanghai, standard_shanghai); TimeZoneInfo str_Berlin = TimeZoneInfo.CreateCustomTimeZone(standard_berlin, berlin_offset, displayBerlin, standard_berlin); TimeZoneInfo str_London = TimeZoneInfo.CreateCustomTimeZone(standard_london, london_offset, displayLondon, standard_london); TimeZoneInfo str_Seoul = TimeZoneInfo.CreateCustomTimeZone(standard_seoul, seoul_offset, displaySeoul, standard_seoul); TimeZoneInfo str_Sydney = TimeZoneInfo.CreateCustomTimeZone(standard_sydney, sydney_offset, displaySydney, standard_sydney); TimeZoneInfo str_Newyork = TimeZoneInfo.CreateCustomTimeZone(standard_newyork, newyork_offset, displayNewYork, standard_newyork);
string data_shanghai = TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.Local, str_Shanghai).ToString(); string data_berlin = TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.Local, str_Berlin).ToString(); string data_london = TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.Local, str_London).ToString(); string data_seoul = TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.Local, str_Seoul).ToString(); string data_sydney = TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.Local, str_Sydney).ToString(); string data_newyork = TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.Local, str_Newyork).ToString();
string[] substr1 = Regex.Split(data_shanghai, " "); string[] substr2 = Regex.Split(data_berlin, " "); string[] substr3 = Regex.Split(data_london, " "); string[] substr4 = Regex.Split(data_seoul, " "); string[] substr5 = Regex.Split(data_sydney, " "); string[] substr6 = Regex.Split(data_newyork, " ");
switch (toolStripComboBox_world.SelectedIndex) { case 0: Label_time.Text = substr2.GetValue(1).ToString(); Label_date.Text = substr2.GetValue(0).ToString(); break; case 1: Label_time.Text = substr3.GetValue(1).ToString(); Label_date.Text = substr3.GetValue(0).ToString(); break; case 2: Label_time.Text = substr1.GetValue(1).ToString(); Label_date.Text = substr1.GetValue(0).ToString(); break; case 3: Label_time.Text = substr4.GetValue(1).ToString(); Label_date.Text = substr4.GetValue(0).ToString(); break; case 4: Label_time.Text = substr5.GetValue(1).ToString(); Label_date.Text = substr5.GetValue(0).ToString(); break; case 5: Label_time.Text = substr6.GetValue(1).ToString(); Label_date.Text = substr6.GetValue(0).ToString(); break; default: Label_time.Text = DateTime.Now.ToShortTimeString(); Label_date.Text = DateTime.Now.ToShortDateString(); break; } } | Moderiert von Christian S.: Topic aus IO, XML und Registry verschoben am Sa 29.05.2010 um 12:57
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Sa 29.05.10 13:45
Dein Code ist ziemlich komplex (auf Arrays greift man normalerweise über substr[0] zu, das ganze Gesplitte kannst du dir über DateTime.ToString("d"/"t") ersparen) und redundant, aber vor allem solltest du die vorgefertigten Zeitzonen benutzen, dann gibt es auch kein Problem mit der Sommerzeit.
C#-Quelltext 1: 2:
| var tzi = TimeZoneInfo.FindSystemTimeZoneById("China Standard Time"); Console.WriteLine("UTC: {0} Lokal: {1} {2}: {3}", DateTime.UtcNow, DateTime.Now, tzi.StandardName, TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tzi)); |
Zitat: | UTC: 29.05.2010 11:44:34 Lokal: 29.05.2010 13:44:34 China Normalzeit: 29.05.2010 19:44:34 |
_________________ >λ=
|
|
Chiyoko 
      
Beiträge: 298
Erhaltene Danke: 8
Win 98, Win Xp, Win 10
C# / C (VS 2019)
|
Verfasst: Sa 29.05.10 14:18
Danke dir, ich habs gerade selbst geloest:D
C#-Quelltext 1: 2: 3: 4: 5: 6: 7:
| TimeZoneInfo timeZoneInfo; DateTime dateTime;
timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("China Standard Time");
dateTime = TimeZoneInfo.ConvertTime(DateTime.Now, timeZoneInfo); listBox1.Items.Add(dateTime); |
wie du bereits geschrieben hast, erspar ich mir das mit den vorgefertigten Zeitzonen.
Aber mein problem bleibt noch,...wie rechne ich automatisch die Sommer / Winterzeit dazu?
Und sorry, das sind meine ersten versuche mit Datetime und deren Zeitzonen:)
EDIT:
Ueber
C#-Quelltext 1: 2: 3: 4: 5:
| using System.Collections.ObjectModel;
ReadOnlyCollection<TimeZoneInfo> zones = TimeZoneInfo.GetSystemTimeZones(); foreach (TimeZoneInfo zone in zones) listBox1.Items.Add(zone.Id); |
kann ich mir leicht die Zonen anzeigen lassen.
EDIT 2:
C#-Quelltext 1:
| label1.Text = dateTime.ToString("t"); |
Das ist klasse, danke:)
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Sa 29.05.10 15:14
Chiyoko hat folgendes geschrieben : | Aber mein problem bleibt noch,...wie rechne ich automatisch die Sommer / Winterzeit dazu? |
Wenn du über ConvertTime gehst, sollte das doch automatisch funktionieren, was genau meinst du?
_________________ >λ=
|
|
Chiyoko 
      
Beiträge: 298
Erhaltene Danke: 8
Win 98, Win Xp, Win 10
C# / C (VS 2019)
|
Verfasst: Sa 29.05.10 15:19
Naja, wir haben jetzt Sommerzeit aber es wird Chinatime nur +ü6h angezeigt, obwohl es +7 sein muessten.Aber wenn das automatisch geht, dann...wirds wohl stimmen.
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Sa 29.05.10 16:53
Chiyoko hat folgendes geschrieben : | Aber wenn das automatisch geht, dann...wirds wohl stimmen. |
Und was folgern wir daraus? Genau, China hat überhaupt keine Sommerzeit  .
_________________ >λ=
Für diesen Beitrag haben gedankt: Chiyoko
|
|
Chiyoko 
      
Beiträge: 298
Erhaltene Danke: 8
Win 98, Win Xp, Win 10
C# / C (VS 2019)
|
Verfasst: Di 20.09.11 21:29
Haha wie passend, ich lese deine Antwort kurz vor meiner Abreise nach China.
Vor ein par Tagen habe ich mir die Frage selbst beantwortet, die Chinesen sind faul bei der Umstellung.
|
|
|