我有字符串格式的DateTime。
2013-03-05T08:28:18+0000
。
我需要输出: - Mar 5, 2013 8:28:18 PM
我正在尝试解析DateTime格式。
string givenDate="2013-03-05T08:28:18+0000";
DateTime parsedDate= DateTime.Parse(givenDate);
string output= parsedDate.ToString("MMM d, yyyy hh:mm:ss tt");
Console.WriteLine("OutPut is==>"+output);
但我的出局是: - Mar 5, 2013 01:58:18 PM
现在时间变了。我的预期输出是 - : - Mar 5, 2013 8:28:18 PM
我也尝试过这样。
parsedDate = DateTime.ParseExact("2013-03-05T08:28:18+0000", "MMM d, yyyy hh:mm:ss tt", new CultureInfo("tr-TR"));
但在这里我收到错误: - Value does not fall within the expected range.
我也尝试过这样: -
parsedDate = DateTime.ParseExact("2013-03-05T08:28:18+0000", "MMM d, yyyy hh:mm:ss tt", CultureInfo.InvariantCulture, DateTimeStyles.None);
和这个
parsedDate = DateTime.ParseExact("2013-03-05T08:28:18+0000", "MMM d, yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
两者都显示此错误: - FormatException
请帮助我将DateTime转换为我需要的内容。
答案 0 :(得分:3)
试试这种方式
string givenDate = ("2013-03-05T08:28:18+0000");
DateTime d = DateTime.Parse(givenDate, System.Globalization.CultureInfo.InvariantCulture);
string ouputDate = d.ToUniversalTime().ToString("MMM d, yyyy h:m:s tt", System.Globalization.CultureInfo.InvariantCulture);
答案 1 :(得分:1)
//First, your entry does not include AM or PM.
//Therefore it is considered a time format 24H
string inputDate="2013-03-05T08:28:18+0000";
//We indicate culture, although in this step is not necessary.
DateTime d = DateTime.Parse(inputDate,CultureInfo.InvariantCulture);
//Your date, contains the modifier +0000, indicating a time zone
//We must become universal time, or local time is displayed
//If you only want 1 digit for the hours, minutes, seconds, when their value < 10, we use a single symbol format
// 01:02:03 ->1:2:3 using h:m:s -> 01:02:03 using hh:mm:ss
//We use invariant culture, or we want to display the data
string ouputDate = d.ToUniversalTime().ToString("MMM d, yyyy h:m:s tt", CultureInfo.InvariantCulture);
// ouputDate ="Mar 5, 2013 8:28:18 AM";
// Because your date dont include any time zone specifier, if want to convert to DateTime, must specify some
// or DateTimeKind.Unspecified is used
//Try this
Console.WriteLine(ouputDate);
DateTime d2 = DateTime.SpecifyKind(DateTime.Parse(ouputDate,CultureInfo.InvariantCulture),DateTimeKind.Utc);
Console.WriteLine(d2);
DateTime d3 = d2.ToLocalTime();
Console.WriteLine(d3);
DateTime d4 = d2.ToUniversalTime();
Console.WriteLine(d4);
//Here d2 is DateTimeKind.Unspecified, the strange result happen in the conversion to string
d2 = DateTime.Parse(ouputDate,CultureInfo.InvariantCulture);
Console.WriteLine(d2);
d3 = d2.ToLocalTime();
Console.WriteLine(d3);
d4 = d2.ToUniversalTime();
Console.WriteLine(d4);
答案 2 :(得分:0)
您的第一行定义了协调世界时的日期/时间,零偏移(AFAIR时间对英国格林威治有效)。
你的第二行正确地解析了这个时间,但它会重新调整你当地时间偏移的时间。它增加了5:30小时,因为你住的时区是UTC + 5:30。
最重要的是你的输入是凌晨(08:28),但你预计它是晚上的时间(08:28 PM)。
这就是第三和第四行显示“意外”结果的原因。
你有一些选择:
"2013-03-05T08:28:18+0530"
"2013-03-05T08:28:18"
parsedDate = parsedDate.ToUniversalTime();