4

我有这个字符串:

string date = "Sun, 17 Mar 2013 12:40:23 +0000";

并尝试转换为日期类型,但是当我尝试转换时,我不断收到格式不正确的错误。

DateTime dt = Convert.ToDateTime(date);

然后尝试将其转换为以下格式:

dt.ToString("dd")
dt.ToString("MMMM")
dt.ToString("yyyy")
4

8 回答 8

7

您可以使用DateTime.ParseExact进行转换。

试试下面的代码:

var date = "Sun, 17 Mar 2013 12:40:23 +0000";
var dt = DateTime.ParseExact(date, "ddd, dd MMM yyyy hh:mm:ss zzz", CultureInfo.InvariantCulture);

Console.WriteLine(dt.ToString("dd"));
Console.WriteLine(dt.ToString("MMMM"));
Console.WriteLine(dt.ToString("yyyy"));

输出:

17
March
2013
于 2013-03-20T13:55:44.337 回答
3

尝试DateTime.TryParse()DateTime.Parse()

于 2013-03-20T13:52:06.227 回答
3

尝试改用DateTime.Parse

var dt = DateTime.Parse(date);

我还建议您使用DateTime.TryParse解析日期,以确保日期始终采用有效格式。

DateTime result;
if (DateTime.TryParse(date, out result))
{
    Console.WriteLine(result.ToString("dd"));
    Console.WriteLine(result.ToString("MMMM"));
    Console.WriteLine(result.ToString("yyyy"));
}
else
{
    Console.WriteLine("Error parsing date.");
}

如果您仍然遇到问题,您可能需要为 DateTime 提供CultureInfo。这允许您指定解析器使用的确切文化,以确保计算机区域设置不会导致任何问题。

DateTime.Parse(date, new CultureInfo("en-US"));     // Specific culture
DateTime.Parse(date, CultureInfo.InvariantCulture); // Culture-insensitive

// Culture-insensitive TryParse
if (DateTime.TryParse(date, out result, CultureInfo.InvariantCulture)) 
{...} 

正常的 DateTime 使用操作系统设置的区域性。

于 2013-03-20T13:52:49.823 回答
2

您可以使用DateTime.Parsewith CultureInfo.InvariantCulturewhich 忽略您当前的文化,从而避免可能的本地化问题。

DateTime dt = DateTime.Parse(date, CultureInfo.InvariantCulture);

CultureInfo.InvariantCulture类似于英语文化并适用于您的字符串。

演示

于 2013-03-20T14:06:37.697 回答
1

你检查过DateTime.TryParse方法吗?如果向下滚动,您会注意到最后一个示例实际上是“Fri, 15 May 2009 20:10:57 GMT”,类似于您的请求。

于 2013-03-20T13:53:34.670 回答
1

您可以使用DateTime.Parse()类似的方法;

string date = "Sun, 17 Mar 2013 12:40:23 +0000";
DateTime dt = DateTime.Parse(date, CultureInfo.InvariantCulture);
Console.WriteLine(dt.ToString("dd"));
Console.WriteLine(dt.ToString("MMMM"));
Console.WriteLine(dt.ToString("yyyy"));

输出将是;

17
March
2013

这是一个DEMO.

于 2013-03-20T13:56:58.303 回答
0

公共字符串 dateConvertion(string da) { string sDate = da; sDate = sDate.Replace("-", "/"); sDate = sDate.Replace(".", "/");

    string format = "dd/MM/yyyy";
    DateTime dDate;
    if (DateTime.TryParse(sDate, out dDate))
    {

        //if (DateTime.TryParseExact(sDate, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dDate))
        //{

        sDate = dDate.ToString("MM/dd/yyyy");
        sDate = sDate.Replace("-", "/");
        sDate = sDate.Replace(".", "/");

    }
    return sDate;
}
于 2015-02-18T05:42:30.243 回答
0

好吧..如果您需要数字格式的结果,请尝试如下所示

 string date = "Sun, 17 Mar 2013 12:40:23 +0000";
 DateTime dt = Convert.ToDateTime(date);
 var day = dt.Day;
 var month = dt.Month;
 var year = dt.Year;
 var time = dt.ToShortTimeString();
 var hour = dt.Hour;
 var minute = dt.Minute;
 var second = dt.Second;

变量将返回准确的数字形式。注意:小时将被描述为 24 小时格式

于 2013-03-20T14:38:35.877 回答