Languages
[Edit]
DE

C# / .NET - ISO 8601 in DateTime konvertieren

3 points
Created by:
Nikki
1653

ISO 8601 präzisiert verschiedene Datums-und Uhrzeitformate. In C# / .NET ist es auf verschiedene Art und Weise möglich, ein ISO 8601 string in ein DateTime Objekt zu konvertieren.

Schnelle Lösung:

using System;
using System.Globalization;

public class Program
{
	public static void Main()
	{
		CultureInfo culture = CultureInfo.InvariantCulture;
		
		string text = "2019-08-18T07:36:13+01:00";
		DateTime time = DateTime.Parse(text, culture, DateTimeStyles.None);

		Console.WriteLine(time.ToString(culture));
	}
}

Unten befinden sich verschieden Beispiele daf√ľr.

1. Beispiel f√ľr eine automatische Formaterkennung

In diesem Abschnitt wird gezeigt, wie die integrierte Methode mit unterschiedlichen Datums-und Uhrzeitformaten umgeht.

Der Code vom unten versucht, das Datums-und Uhrzeitformat zu ermitteln und das Ergebnis in der Konsole zu drucken. Wie man sehen kann, werden einige Datums-und Uhrzeitformate von der Standardkonfiguratio nicht unterst√ľtzt, was als¬†PARSING ERROR!¬†Text dargestellt wird. Um dieses Problem zu l√∂sen, kann man eine benutzerdefinierte Liste der unterst√ľtzten Formate definieren und diese verwenden, um das Format zu erkennen, wenn ein Fehler aufgetreten ist. Es lohnt sich folgende Beispiele √ľberpr√ľfen, um zu sehen, wie es funktioniert.¬†

using System;
using System.Globalization;

public class Program
{
	public static void Main()
	{
		string[] dates = {
			"2019-08-18T07:36:13.5344729+01:00",

			"2019-08-18T07:36:13+01:00",
			"2019-08-18T07:36:13+01",
			"2019-08-18T07:36:13",
			"2019-08-18T07:36+01:00",
			"2019-08-18T07:36+01",
			"2019-08-18T07:36",
			"2019-08-18T07+01:00",
			"2019-08-18T07+01",
			"2019-08-18T07",
			"2019-08-18",

			"20190818T073613+01:00",
			"20190818T073613+01",
			"20190818T0736+01:00",
			"20190818T0736+01",
			"20190818T07+01:00",
			"20190818T07+01",
			"20190818T07",
			"20190818",

			"--08-18",

			"2019-08-18T06:36:13Z",
			"2019-08-18T06:36Z",
			"2019-08-18T06Z",

			"20190818T063613Z",
			"20190818T0636Z",
			"20190818T06Z"
		};

		CultureInfo culture = CultureInfo.InvariantCulture;

		foreach (string entry in dates)
		{
			DateTime time;

			if (DateTime.TryParse(entry, culture, DateTimeStyles.None, out time))
			{
				string text = time.ToString(culture);
				Console.WriteLine(string.Format("{0, -35} {1}", entry, text));
			}
			else
				Console.WriteLine(string.Format("{0, -35} {1}", entry, "PARSING ERROR!"));
		}
	}
}
Hinweis: Zum Parsen von Datums-und Uhrzeit Strings kann man¬†auch die¬†DateTime.Parse¬†Methode verwenden, die eine Ausnahme ausl√∂st, wenn das Format falsch ist oder nicht unterst√ľtzt wird.

Ausgabe:

2019-08-18T07:36:13.5344729+01:00   08/18/2019 07:36:13

2019-08-18T07:36:13+01:00           08/18/2019 07:36:13
2019-08-18T07:36:13+01              08/18/2019 07:36:13
2019-08-18T07:36:13                 08/18/2019 07:36:13
2019-08-18T07:36+01:00              08/18/2019 07:36:00
2019-08-18T07:36+01                 08/18/2019 07:36:00
2019-08-18T07:36                    08/18/2019 07:36:00
2019-08-18T07+01:00                 PARSING ERROR!
2019-08-18T07+01                    PARSING ERROR!
2019-08-18T07                       PARSING ERROR!
2019-08-18                          08/18/2019 00:00:00

20190818T073613+01:00               PARSING ERROR!
20190818T073613+01                  PARSING ERROR!
20190818T0736+01:00                 PARSING ERROR!
20190818T0736+01                    PARSING ERROR!
20190818T07+01:00                   PARSING ERROR!
20190818T07+01                      PARSING ERROR!
20190818T07                         PARSING ERROR!
20190818                            PARSING ERROR!

--08-18                             PARSING ERROR!

2019-08-18T06:36:13Z                08/18/2019 07:36:13
2019-08-18T06:36Z                   08/18/2019 07:36:00
2019-08-18T06Z                      PARSING ERROR!
20190818T063613Z                    PARSING ERROR!
20190818T0636Z                      PARSING ERROR!
20190818T06Z                        PARSING ERROR!

2019-W34-0                          PARSING ERROR!
2019-W34                            PARSING ERROR!
2019-230                            PARSING ERROR!
Hinweis: Date-time Werte werden nach der in der Ausgabe angezeigten Ortszeit analysiert. Weitere Informationen zum Suffix Z findet man hier. 

2. Beispiel f√ľr ein benutzerdefiniertes Format

Es gibt auch andere Möglichkeiten, benutzerdefinierte Formate zum Parsen von Date-time String zu verwenden. 

Wenn die Standardanalyse fehlgeschlagen ist und man sicher ist, dass das richtige Datums-und Uhrzeitformat verwendet wird, kann man auch zusätzliche Fälle definieren, die akzeptiert werden. 

Die folgenden Daten wurden aus dem obigen Beispiel kopiert, sodass leicht zu erkennen ist, dass sie mit der¬†Parse¬†Methode nicht unterst√ľtzt werden.

using System;
using System.Globalization;

public class Program
{
	public static void Main()
	{
		string[,] dates = {
			// FORMAT                    TEXT

			{ "yyyy-MM-ddTHH:mm:sszzz",   "2019-08-18T07:36:13+01:00" },
			{ "yyyy-MM-ddTHH:mm:sszz",    "2019-08-18T07:36:13+01"    },
			{ "yyyy-MM-ddTHH:mm:ss",      "2019-08-18T07:36:13"       },
			{ "yyyy-MM-ddTHH:mmzzz",      "2019-08-18T07:36+01:00"    },
			{ "yyyy-MM-ddTHH:mmzz",       "2019-08-18T07:36+01"       },
			{ "yyyy-MM-ddTHH:mm",         "2019-08-18T07:36"          },
			{ "yyyy-MM-ddTHHzzz",         "2019-08-18T07+01:00"       },
			{ "yyyy-MM-ddTHHzz",          "2019-08-18T07+01"          },
			{ "yyyy-MM-ddTHH",            "2019-08-18T07"             },
			{ "yyyy-MM-dd",               "2019-08-18"                },

			{ "yyyyMMddTHHmmsszzz",       "20190818T073613+01:00"     },
			{ "yyyyMMddTHHmmsszz",        "20190818T073613+01"        },
			{ "yyyyMMddTHHmmzzz",         "20190818T0736+01:00"       },
			{ "yyyyMMddTHHmmzz",          "20190818T0736+01"          },
			{ "yyyyMMddTHHzzz",           "20190818T07+01:00"         },
			{ "yyyyMMddTHHzz",            "20190818T07+01"            },
			{ "yyyyMMddTHH",              "20190818T07"               },
			{ "yyyyMMdd",                 "20190818"                  },

			{ "--MM-dd",                  "--08-18"                  },

			{ "yyyy-MM-ddTHH:mm:ssZ",     "2019-08-18T06:36:13Z"      },
			{ "yyyy-MM-ddTHH:mmZ",        "2019-08-18T06:36Z"         },
			{ "yyyy-MM-ddTHHZ",           "2019-08-18T06Z"            },

			{ "yyyyMMddTHHmmssZ",         "20190818T063613Z"          },
			{ "yyyyMMddTHHmmZ",           "20190818T0636Z"            },
			{ "yyyyMMddTHHZ",             "20190818T06Z"              }
		};

		CultureInfo culture = CultureInfo.InvariantCulture;
		int length = dates.GetLength(0);

		for (int i = 0; i < length; ++i)
		{
			string format = dates[i, 0];
			string text = dates[i, 1];

			DateTime time = DateTime.ParseExact(text, format, culture, DateTimeStyles.None);
			Console.WriteLine(string.Format("{0, -35} {1}", text, time.ToString(culture)));
		}
	}
}

Ausgabe:

2019-08-18T07:36:13+01:00           08/18/2019 07:36:13
2019-08-18T07:36:13+01              08/18/2019 07:36:13
2019-08-18T07:36:13                 08/18/2019 07:36:13
2019-08-18T07:36+01:00              08/18/2019 07:36:00
2019-08-18T07:36+01                 08/18/2019 07:36:00
2019-08-18T07:36                    08/18/2019 07:36:00
2019-08-18T07+01:00                 08/18/2019 07:00:00
2019-08-18T07+01                    08/18/2019 07:00:00
2019-08-18T07                       08/18/2019 07:00:00
2019-08-18                          08/18/2019 00:00:00

20190818T073613+01:00               08/18/2019 07:36:13
20190818T073613+01                  08/18/2019 07:36:13
20190818T0736+01:00                 08/18/2019 07:36:00
20190818T0736+01                    08/18/2019 07:36:00
20190818T07+01:00                   08/18/2019 07:00:00
20190818T07+01                      08/18/2019 07:00:00
20190818T07                         08/18/2019 07:00:00
20190818                            08/18/2019 00:00:00

--08-18                             08/18/2019 00:00:00

2019-08-18T06:36:13Z                08/18/2019 07:36:13
2019-08-18T06:36Z                   08/18/2019 07:36:00
2019-08-18T06Z                      08/18/2019 07:00:00

20190818T063613Z                    08/18/2019 07:36:13
20190818T0636Z                      08/18/2019 07:36:00
20190818T06Z                        08/18/2019 07:00:00
Hinweis: Date-time Werte werden nach der in der Ausgabe angezeigten Ortszeit analysiert. Weitere Informationen zum Suffix Z findet man hier. 

Siehe auch

  1. ISO 8601 - Was ist Z im Datums- / Uhrzeitformat yyyy-MM-ddTHH:mm:ssZ?

Literaturverzeichnis

  1. ISO 8601 - Wikipedia
  2. ISO week date - Wikipedia
  3. DateTime.ParseExact Method - Microsoft Docs
Hey ūüĎč
Would you like to know what we do?
  • Dirask is a friendly IT community for learners, professionals and hobbyists to share their knowledge and help each other in extraordinary easy way.
  • We welcome everyone,
    no matter what the experience,
    no matter how basic the question is,
    this community will help you.