将 DateTime 转换为特定格式
Convert DateTime to a specific format
将 DateTime 转换为这种格式的最佳和最快的方法是什么?
2015-03-26T18:02:58.145798Z
目前我从服务器收到一个日期,我能够解析它并将日期转换为 DateTime,ToString() 输出如下所示:
26/03/2015 18:02:58
为了转换日期,我使用了这行代码:
var parsedDate = DateTime.Parse("2015-03-26T18:02:58.145798Z", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);
将 parsedDate 转换回原始格式的最佳方法是什么?
编辑:我想将 DateTime 转换为这种格式 2015-03-26T18:02:58.145798Z as string
如果您有一个 DateTime
对象,您可以使用 O
作为格式说明符将其转换为具有该特定格式的字符串:
parsedDate.ToString("O")
或
parsedDate.ToUniversalTime().ToString("O") // if parsedDate is not UTC
returns "2015-03-26T18:02:58.1457980Z"
.
如果 DateTime
对象的 DateTimeKind
不是 Utc
,那么根据 ISO8601,您将不会在字符串末尾获得 Z
扩展名。在您提供的示例中,存在 Z
,因为 DateTime.Parse
会识别它,而 return 是 Utc
中的 DateTime
。如果 Z
在您解析的原始字符串中丢失,您仍然可以通过在日期时间对象上使用 ToUniversalTime()
来假设它是 UTC。
答案和@Dirk说的差不多:
parsedDate.ToString("O")
是行,但是 您必须将 DateTime 转换为 UTC:这就是最后获得 "Z" 的方式。
有关详细信息,请参阅 https://msdn.microsoft.com/en-us/library/az4se3k1%28v=vs.110%29.aspx。
编辑:
要将 DateTime 转换为 UTC,请使用 ToUniversalTime()
方法。
据我所知,最快的方法是:
///<summary>Format the date time value as a parsable ISO format: "2008-01-11T16:07:12Z".</summary>
public static string ISO( this DateTime dt ) {
var ca = new char[] {
(char) ( dt.Year / 1000 % 10 + '0' ),
(char) ( dt.Year / 100 % 10 + '0' ),
(char) ( dt.Year / 10 % 10 + '0' ),
(char) ( dt.Year % 10 + '0' ),
'-',
(char) ( dt.Month / 10 + '0' ),
(char) ( dt.Month % 10 + '0' ),
'-',
(char) ( dt.Day / 10 + '0' ),
(char) ( dt.Day % 10 + '0' ),
'T',
(char) ( dt.Hour / 10 + '0' ),
(char) ( dt.Hour % 10 + '0' ),
':',
(char) ( dt.Minute / 10 + '0' ),
(char) ( dt.Minute % 10 + '0' ),
':',
(char) ( dt.Second / 10 + '0' ),
(char) ( dt.Second % 10 + '0' ),
'Z',
};
return new string( ca );
}
将 DateTime 转换为这种格式的最佳和最快的方法是什么?
2015-03-26T18:02:58.145798Z
目前我从服务器收到一个日期,我能够解析它并将日期转换为 DateTime,ToString() 输出如下所示:
26/03/2015 18:02:58
为了转换日期,我使用了这行代码:
var parsedDate = DateTime.Parse("2015-03-26T18:02:58.145798Z", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);
将 parsedDate 转换回原始格式的最佳方法是什么?
编辑:我想将 DateTime 转换为这种格式 2015-03-26T18:02:58.145798Z as string
如果您有一个 DateTime
对象,您可以使用 O
作为格式说明符将其转换为具有该特定格式的字符串:
parsedDate.ToString("O")
或
parsedDate.ToUniversalTime().ToString("O") // if parsedDate is not UTC
returns "2015-03-26T18:02:58.1457980Z"
.
如果 DateTime
对象的 DateTimeKind
不是 Utc
,那么根据 ISO8601,您将不会在字符串末尾获得 Z
扩展名。在您提供的示例中,存在 Z
,因为 DateTime.Parse
会识别它,而 return 是 Utc
中的 DateTime
。如果 Z
在您解析的原始字符串中丢失,您仍然可以通过在日期时间对象上使用 ToUniversalTime()
来假设它是 UTC。
答案和@Dirk说的差不多:
parsedDate.ToString("O")
是行,但是 您必须将 DateTime 转换为 UTC:这就是最后获得 "Z" 的方式。
有关详细信息,请参阅 https://msdn.microsoft.com/en-us/library/az4se3k1%28v=vs.110%29.aspx。
编辑:
要将 DateTime 转换为 UTC,请使用 ToUniversalTime()
方法。
据我所知,最快的方法是:
///<summary>Format the date time value as a parsable ISO format: "2008-01-11T16:07:12Z".</summary>
public static string ISO( this DateTime dt ) {
var ca = new char[] {
(char) ( dt.Year / 1000 % 10 + '0' ),
(char) ( dt.Year / 100 % 10 + '0' ),
(char) ( dt.Year / 10 % 10 + '0' ),
(char) ( dt.Year % 10 + '0' ),
'-',
(char) ( dt.Month / 10 + '0' ),
(char) ( dt.Month % 10 + '0' ),
'-',
(char) ( dt.Day / 10 + '0' ),
(char) ( dt.Day % 10 + '0' ),
'T',
(char) ( dt.Hour / 10 + '0' ),
(char) ( dt.Hour % 10 + '0' ),
':',
(char) ( dt.Minute / 10 + '0' ),
(char) ( dt.Minute % 10 + '0' ),
':',
(char) ( dt.Second / 10 + '0' ),
(char) ( dt.Second % 10 + '0' ),
'Z',
};
return new string( ca );
}