在c#中不能解析字符串为精确日期时间
本文关键字:日期 时间 字符串 不能 | 更新日期: 2023-09-27 18:07:28
我有字符串格式的DateTime。2013-03-05T08:28:18+0000
。
我需要这样的输出:- Mar 5, 2013 8:28:18 PM
我正在尝试解析为日期时间格式。
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作为我需要的。
试试这个
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);
//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);
第一行定义了零偏移的协调世界时的日期/时间(即英国格林威治有效的时间)。
第二行正确地解析了这个时间,但是它根据您的本地时间偏移量重新调整了时间。它增加了5:30小时,因为您生活在UTC+5:30时区。
上面的输入是清晨时间(08:28),但您希望它是晚上时间(08:28 PM)。
这就是为什么第三行和第四行显示了"unexpected"结果。
你有一些选择:
- 将输入改为
"2013-03-05T08:28:18+0530"
- 将输入更改为
"2013-03-05T08:28:18"
- 用
parsedDate = parsedDate.ToUniversalTime();
调整输出