PL
C # / .NET - przekonwertuj DateTime na ISO 8601
3
points
W tym artykule pokażemy, jak w C # / .NET przekonwertować obiekt DateTime
na ciąg iso 8601.
Szybkie rozwiązanie:
using System;
public class Program
{
public static void Main()
{
DateTime time = DateTime.Now;
DateTime utcTime = DateTime.UtcNow;
Console.WriteLine(time.ToString("yyyy-MM-ddTHH:mm:sszzz")); // 2020-07-28T08:40:39+00:00
Console.WriteLine(utcTime.ToString("yyyy-MM-ddTHH:mm:ssZ")); // 2020-07-28T08:40:39Z
}
}
Wynik:
2020-07-28T08:40:39+00:00
2020-07-28T08:40:39Z
Poniżej znajdziesz pełne przykłady:
1. Przykład standardowego formatu daty i godziny
Ważne jest, aby użyć niezmiennych informacji o kulturze, aby uzyskać właściwy czas sformatowany z metody ToString()
.
using System;
using System.Globalization;
public class Program
{
private static CultureInfo culture = CultureInfo.InvariantCulture;
public static void Main()
{
DateTime time = DateTime.Now;
DateTime utcTime = DateTime.UtcNow;
// without time zone infomration
Console.WriteLine(time.ToString("s", culture)); // 2020-05-22T21:08:42
Console.WriteLine(utcTime.ToString("s", culture)); // 2020-05-22T21:08:42
// with time zone information (+/-HH:MM or Z)
Console.WriteLine(time.ToString("o", culture)); // 2020-05-22T21:08:42.9082887+00:00
Console.WriteLine(utcTime.ToString("o", culture)); // 2020-05-22T21:08:42.9082887Z
}
}
Wynik:
2020-05-22T21:08:42
2020-05-22T21:08:42
2020-05-22T21:08:42.9082887+00:00
2020-05-22T21:08:42.9082887Z
2. Przykład niestandardowych ciągów formatu daty i godziny
Istnieją różne formaty czasów ISO 8601.
using System;
public class Program
{
public static void Main()
{
DateTime time = DateTime.Now;
Console.WriteLine(time.ToString("yyyy-MM-ddTHH:mm:sszzz")); // 2019-08-18T07:36:13+01:00
Console.WriteLine(time.ToString("yyyyMMdd")); // 20190818
Console.WriteLine(time.ToString("--MM-dd")); // --08-18
DateTime utcTime = DateTime.UtcNow;
Console.WriteLine(utcTime.ToString("yyyy-MM-ddTHH:mm:ssZ")); // 2019-08-18T06:36:13Z
Console.WriteLine(utcTime.ToString("yyyyMMddTHHZ")); // 20190818T06Z
}
}
// ------------------------------------------------------
// Check other custom formats at the end of this section.
//
Wynik:
2019-08-18T07:36:13+01:00
2019-08-18T06:36:13Z
20190818T06Z
20190818
--08-18
Uwaga: ciąg daty i godziny z przyrostkiem Z powinien być oparty na
DateTime.UtcNow
. Sprawdź ten link, aby uzyskać więcej informacji.
Inne formaty niestandardowe:
/*
--[ To use with DateTime.Now ]----------------------
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
--[ To use with DateTime.UtcNow ]-------------------
FORMAT TEXT
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
*/
3. Przykład niestandardowego tygodnia i daty porządkowej
W tej sekcji prezentowana jest niestandardowa metoda zwracająca tydzień lub datę porządkową.
using System;
using System.Globalization;
public static class ISO8601TimeUtils
{
public static string GetSimpleWeekDate(DateTime time)
{
CultureInfo culture = CultureInfo.InvariantCulture;
Calendar calendar = culture.Calendar;
DateTimeFormatInfo format = culture.DateTimeFormat;
int week = calendar.GetWeekOfYear(time,
format.CalendarWeekRule, format.FirstDayOfWeek);
return time.Year + "-W" + week;
}
public static string GetExtendedWeekDate(DateTime time)
{
string week = GetSimpleWeekDate(time);
return week + "-" + (int)time.DayOfWeek;
}
public static string GetOrdinalDate(DateTime time)
{
return time.Year + "-" + time.DayOfYear;
}
}
// Usage example:
public class Program
{
public static void Main()
{
DateTime time = DateTime.Now;
Console.WriteLine(ISO8601TimeUtils.GetExtendedWeekDate(time)); // 2019-W34-0
Console.WriteLine(ISO8601TimeUtils.GetSimpleWeekDate(time)); // 2019-W34
Console.WriteLine(ISO8601TimeUtils.GetOrdinalDate(time)); // 2019-230
}
}
Wynik:
2019-W34-0
2019-W34
2019-230
Uwaga: powyższy przykład zwraca inny numer tygodnia w zależności od konfiguracji metody
Calendar.GetWeekOfYear
.