【发布时间】:2014-04-26 15:18:16
【问题描述】:
如何将 ISO 日期(20140312120000 或 2014-03-12 12:00:00)转换为“2014 年 3 月 12 日 12:00:00”?
谢谢。
【问题讨论】:
如何将 ISO 日期(20140312120000 或 2014-03-12 12:00:00)转换为“2014 年 3 月 12 日 12:00:00”?
谢谢。
【问题讨论】:
不能用普通的 DateTime.Parse 方法解析,
DateTime.ParseExact(date, "yyyyMMdd''HHmmss", CultureInfo.InvariantCulture)
【讨论】:
'T' -- 删除它。您的字符串不是 ISO 日期/时间,因为它缺少“T”。
DateTime thisDate1 = new DateTime(2014, 3, 12);
Console.WriteLine("Today is " + thisDate1.ToString("MMMM dd, yyyy") + ".");
// The example displays the following output:
// Today is March 12, 2011.
【讨论】:
我是这样解决的:DateTime.Parse(isodate).ToString("MMMM dd, yyyy HH:mm:ss")。
【讨论】:
您要做的是将输入字符串解析为DateTime,然后将其转换为您想要的形式。 ParseExact 和 ToString 方法可以完成这项工作。
public string MyFromat(string s)
{
var inputForms = new string[]
{
"yyyyMMdd''HHmmss",
"yyyy-MM-dd' 'HH':'mm':'ss"
};
var time = DateTime.ParseExact(s, inputForms, , CultureInfo.InvariantCulture);
return time.ToString(""MMMM dd, yyyy HH':'mm':'dd", , CultureInfo.InvariantCulture);
}
您的两个示例表单不是ISO。如果要解析 ISO 日期时间,请使用 DateTimeOffset 表示时间并使用以下输入形式:
static readonly string[] Iso8061DateTimeForms = new string[]
{
"yyyyMMdd'T'HHmmss",
"yyyyMMdd'T'HHmmss'Z'",
"yyyyMMdd'T'HHmmsszzz",
"yyyyMMdd'T'HHmmss'.'fffffff",
"yyyyMMdd'T'HHmmss'.'fffffff'Z'",
"yyyyMMdd'T'HHmmss'.'fffffffzzz",
"yyyy'-'MM'-'dd'T'HH':'mm':'ss",
"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'",
"yyyy'-'MM'-'dd'T'HH':'mm':'sszzz",
"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffff",
"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffff'Z'",
"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffzzz",
};
解析 ISO 8061 时间的完整实现是:
public static DateTimeOffset ParseIso8061Time(string s)
{
var styles = DateTimeStyles.AllowWhiteSpaces |
(s.EndsWith("Z")
? DateTimeStyles.AssumeUniversal
: DateTimeStyles.AssumeLocal);
return DateTimeOffset.ParseExact(s, Iso8061DateTimeForms,
CultureInfo.InvariantCulture, styles);
}
【讨论】: