03. september 2004 - 15:06
Der er
9 kommentarer
Forskellige datoer til bestemt dato/tidzone
Hej, Jeg sidder og rodder med at lave en mail klient i C#. Jeg har problemer med at konventere de forskellige dato og tider som mailserverne sender med mails... Så det jeg skal bruge er noget kode som laver en hvilken som helst af de datoer om til en datetime som jeg kan smide i min SQL... Den færdige datetime skal være i vores tidszone. Eksempler på datoer: Wed, 01 Sep 2004 14:03:29 GMT Sat, 28 Aug 2004 10:05:55 -0700 Wed, 1 Sep 2004 11:23:27 EST Sat, 28 Aug 2004 18:51:44 -0400 (EDT) Wed, 1 Sep 2004 11:13:05 -0800 Wed, 1 Sep 2004 17:23:53 EST Wed, 1 Sep 2004 23:02:01 +0000 (GMT) Wed, 1 Sep 2004 21:12:38 -0400 (EDT) Wed, 1 Sep 2004 07:33:58 -0700 Thu, 2 Sep 2004 00:09:05 -0800 Tue, 31 Aug 2004 07:16:41 -0700 Thu, 2 Sep 2004 11:03:59 +0200 (CEST) Thu, 2 Sep 2004 11:51:00 +0200 Wed, 1 Sep 2004 08:43:36 -0700 Thu, 2 Sep 2004 11:08:32 EST Thu, 2 Sep 2004 18:13:00 +0200 Thu, 2 Sep 2004 18:21:42 +0200 Thu, 2 Sep 2004 12:54:28 -0400 Wed, 1 Sep 2004 17:30:26 +0200 Wed, 1 Sep 2004 22:22:54 +0200 1 Sep 2004 22:59:07 -0000 Wed, 1 Sep 2004 23:02:01 +0000 (GMT) Thu, 02 Sep 2004 01:37:55 +0200 Thu, 2 Sep 2004 19:11:13 +0200 Fri, 3 Sep 2004 13:12:34 +0200 (CEST) Det var lige de mails jeg lå inde med... Som I kan se svinger formattet af dato/tid fra mailserverne meget. Så koden skal tage højde for tidzone og dato osv. og udregne den korrekte dato/tid. Er det muligt? Specialty.
Annonceindlæg fra Computerworld it-jobbank
03. september 2004 - 15:10
#1
Hvad siger DateFormat Parse til dem ?
03. september 2004 - 15:24
#2
DateTime Parse kan tage alt undtagen tidzonen altså +0200 (GMT) osv... Dvs. evt. noget med at bruge Datetime på datoen og tiden også selv med/modregne tidszonen bagefter... men hvordan det lige skal gøres, der er jeg blank.
04. september 2004 - 10:55
#3
Det er faktisk lidt bedre end det. Her er noget kode som faktisk håndterer alle de opgivne formater: using System; using System.Globalization; class MainClass { public static void Main(string[] args) { string[] s = { "Wed, 01 Sep 2004 14:03:29 GMT", "Sat, 28 Aug 2004 10:05:55 -0700", "Wed, 1 Sep 2004 11:23:27 EST", "Sat, 28 Aug 2004 18:51:44 -0400 (EDT)", "Wed, 1 Sep 2004 11:13:05 -0800", "Wed, 1 Sep 2004 17:23:53 EST", "Wed, 1 Sep 2004 23:02:01 +0000 (GMT)", "Wed, 1 Sep 2004 21:12:38 -0400 (EDT)", "Wed, 1 Sep 2004 07:33:58 -0700", "Thu, 2 Sep 2004 00:09:05 -0800", "Tue, 31 Aug 2004 07:16:41 -0700", "Thu, 2 Sep 2004 11:03:59 +0200 (CEST)", "Thu, 2 Sep 2004 11:51:00 +0200", "Wed, 1 Sep 2004 08:43:36 -0700", "Thu, 2 Sep 2004 11:08:32 EST", "Thu, 2 Sep 2004 18:13:00 +0200", "Thu, 2 Sep 2004 18:21:42 +0200", "Thu, 2 Sep 2004 12:54:28 -0400", "Wed, 1 Sep 2004 17:30:26 +0200", "Wed, 1 Sep 2004 22:22:54 +0200", "1 Sep 2004 22:59:07 -0000", "Wed, 1 Sep 2004 23:02:01 +0000 (GMT)", "Thu, 02 Sep 2004 01:37:55 +0200", "Thu, 2 Sep 2004 19:11:13 +0200", "Fri, 3 Sep 2004 13:12:34 +0200 (CEST)" }; for(int i = 0; i < s.Length; i++) { string[] fmt = { "r", "ddd, d MMM yyyy HH:mm:ss zzz", "ddd, dd MMM yyyy HH:mm:ss zzz", "d MMM yyyy HH:mm:ss zzz", "dd MMM yyyy HH:mm:ss zzz", "ddd, d MMM yyyy HH:mm:ss zz", "ddd, dd MMM yyyy HH:mm:ss zz", "d MMM yyyy HH:mm:ss zz", "dd MMM yyyy HH:mm:ss zz" }; try { string s2; int ix = s[i].IndexOf(" ("); if(ix >= 0) { s2 = s[i].Substring(0, ix); } else { s2 = s[i]; } s2 = s2.Replace("EST", "+0100"); DateTime dt = DateTime.ParseExact(s2, fmt, null, DateTimeStyles.AllowWhiteSpaces); Console.WriteLine(s[i] + " = " + dt); } catch { Console.WriteLine(s[i] + " = unknown format"); } } } }
04. september 2004 - 10:56
#4
Det skal muligvis forbedres lidt. Bl.a. bør alle tidszone angivelser med undtagelse af GMT erstattes med offset angivelse. Men det bør få dig igang.
04. september 2004 - 16:49
#5
Det så ikke helt ud til at virke.... Den acceptere ikke det der +0700, den acceptere kun GMT. Har du en løsning på dette? =)
04. september 2004 - 16:54
#6
Øh - hos mig virker det. Output: Wed, 01 Sep 2004 14:03:29 GMT = 01/09/2004 14:03:29 Sat, 28 Aug 2004 10:05:55 -0700 = 28/08/2004 19:05:55 Wed, 1 Sep 2004 11:23:27 EST = 01/09/2004 12:23:27 Sat, 28 Aug 2004 18:51:44 -0400 (EDT) = 29/08/2004 00:51:44 Wed, 1 Sep 2004 11:13:05 -0800 = 01/09/2004 21:13:05 Wed, 1 Sep 2004 17:23:53 EST = 01/09/2004 18:23:53 Wed, 1 Sep 2004 23:02:01 +0000 (GMT) = 02/09/2004 01:02:01 Wed, 1 Sep 2004 21:12:38 -0400 (EDT) = 02/09/2004 03:12:38 Wed, 1 Sep 2004 07:33:58 -0700 = 01/09/2004 16:33:58 Thu, 2 Sep 2004 00:09:05 -0800 = 02/09/2004 10:09:05 Tue, 31 Aug 2004 07:16:41 -0700 = 31/08/2004 16:16:41 Thu, 2 Sep 2004 11:03:59 +0200 (CEST) = 02/09/2004 11:03:59 Thu, 2 Sep 2004 11:51:00 +0200 = 02/09/2004 11:51:00 Wed, 1 Sep 2004 08:43:36 -0700 = 01/09/2004 17:43:36 Thu, 2 Sep 2004 11:08:32 EST = 02/09/2004 12:08:32 Thu, 2 Sep 2004 18:13:00 +0200 = 02/09/2004 18:13:00 Thu, 2 Sep 2004 18:21:42 +0200 = 02/09/2004 18:21:42 Thu, 2 Sep 2004 12:54:28 -0400 = 02/09/2004 18:54:28 Wed, 1 Sep 2004 17:30:26 +0200 = 01/09/2004 17:30:26 Wed, 1 Sep 2004 22:22:54 +0200 = 01/09/2004 22:22:54 1 Sep 2004 22:59:07 -0000 = 02/09/2004 00:59:07 Wed, 1 Sep 2004 23:02:01 +0000 (GMT) = 02/09/2004 01:02:01 Thu, 02 Sep 2004 01:37:55 +0200 = 02/09/2004 01:37:55 Thu, 2 Sep 2004 19:11:13 +0200 = 02/09/2004 19:11:13 Fri, 3 Sep 2004 13:12:34 +0200 (CEST) = 03/09/2004 13:12:34
11. september 2004 - 20:53
#7
Kommet videre ?
12. september 2004 - 01:42
#8
Ja, det lykkedes til sidst at få den til det... Jeg takker...
19. september 2004 - 19:23
#9
Hvis du har brugt kode/ideer fra mit eksempel bør du lige acceptere mit svar ...
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.