Languages
[Edit]
DE

C# / .NET - ISO 8601 in DateTime konvertieren

3 points
Created by:
Nikki
8420

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
Native Advertising
­čÜÇ
Get your tech brand or product in front of software developers.
For more information Contact us
Dirask - friendly IT community for everyone.

ÔŁĄ´ŞĆ­čĺ╗ ­čÖé

Join