Avatar billede specialty Nybegynder
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.
Avatar billede arne_v Ekspert
03. september 2004 - 15:10 #1
Hvad siger DateFormat Parse til dem ?
Avatar billede specialty Nybegynder
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.
Avatar billede arne_v Ekspert
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");
            }
        }
    }
}
Avatar billede arne_v Ekspert
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.
Avatar billede specialty Nybegynder
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? =)
Avatar billede arne_v Ekspert
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
Avatar billede arne_v Ekspert
11. september 2004 - 20:53 #7
Kommet videre ?
Avatar billede specialty Nybegynder
12. september 2004 - 01:42 #8
Ja, det lykkedes til sidst at få den til det... Jeg takker...
Avatar billede arne_v Ekspert
19. september 2004 - 19:23 #9
Hvis du har brugt kode/ideer fra mit eksempel bør du lige acceptere mit svar ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester