在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作为我需要的。

在c#中不能解析字符串为精确日期时间

试试这个

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();
  • 调整输出