我有这个字符串:20190312T120000
基本上是Icloud .ics文件中的开始事件值。
我如何转换:
20190312T120000
到.ToString("MM/dd/yyyy HH:mm:ss")
格式。
我正在尝试使用Try.Parse和ParseExact,但没有成功。
是否有一些内置的方式,或者我必须手动进行。
答案 0 :(得分:2)
您可以使用DateTime
将其转换为ParseExact
:
var dateString = "20190312T120000";
var parsed = DateTime.ParseExact(dateString, "yyyyMMddTHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
我假设您提供的日期是UTC,但是如果是当地时间,则应将上面的代码写为:
var dateString = "20190312T120000";
var parsed = DateTime.ParseExact(dateString, "yyyyMMddTHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal);
这将假定日期位于执行代码时区的计算机中。
然后您可以像这样以目标格式编写它:
Console.WriteLine(parsed.ToString("MM/dd/yyyy HH:mm:ss"));
**请记住,DateTime
对象本身没有任何格式-它们将日期存储为多个刻度,因此只有在将日期转换为string
时才能格式化日期。 / p>
答案 1 :(得分:1)
您可以使用DateTime.ParseExact()
解析为DateTime
。确切的格式字符串应为yyyyMMddTHHmmss
(Date and time string formats)。
然后,您可以按照自己喜欢的方式设置日期格式:
string datestring = "20190312T120000";
var dateTime = DateTime.ParseExact(datestring, "yyyyMMddTHHmmss", CultureInfo.InvariantCulture);
Console.WriteLine(dateTime.ToString("MM/dd/yyyy HH:mm:ss"));
// output
03/12/2019 12:00:00
答案 2 :(得分:0)
我不认为ICS日期时间(RFC 5545)在c#中具有内置转换。
您可以执行以下操作。首先需要将其放入Date
对象中。
var format = "yyyyMMddTHHmmssZ";
var icsDate = "20190312T120000 ";
var date = DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture);
现在可以放入格式化的字符串了
var dateStr = date.ToString("MM/dd/yyyy HH:mm:ss");