无法在C#中将字符串解析为Exact DateTime

时间:2014-06-07 07:14:28

标签: c# windows-phone-7 datetime

我有字符串格式的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转换为我需要的内容。

3 个答案:

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