将字符串值解析为datetime值

时间:2012-06-13 11:21:18

标签: c#

我需要解析字符串值到日期时间值,我有这种格式的日期:

DD.MM.YYYY

我想以这种格式解析值:

YYYY-MM-DD

我试着这样做:

DateTime.ParseExact(date_req, "yyyy-MM-dd", CultureInfo.InvariantCulture); 

但我有一个错误:字符串未被识别为有效的DateTime。

有办法做到这一点吗?

7 个答案:

答案 0 :(得分:3)

如果您的格式为DD.MM.YYYY,为什么要将YYYY-MM-DD传递给ParseExact函数?

试试这样:

string dateStr = "12.06.2012";
DateTime date = DateTime.ParseExact(dateStr, "dd.MM.yyyy", CultureInfo.InvariantCulture);

然后,当您想要在某处输出此DateTime实例时,您可以使用YYYY-MM-DD格式,如下所示:

string result = date.ToString("yyyy-MM-dd");

答案 1 :(得分:1)

解析日期时,您需要指定要读取的格式,而不是以后想要输出的格式。

因此使用dd.MM.yyyy作为ParseExact的参数。

答案 2 :(得分:1)

  

Check DateTime.ParseExact Method (String, String, IFormatProvider)转换指定的字符串表示形式   DateTime等效日期和时间。格式   字符串表示必须与指定的格式完全匹配或   抛出异常。

您必须将格式字符串指定为DD.MM.YYYY而不是"yyyy-MM-dd"

试试这个:

DateTime dateValue = DateTime.ParseExact(date_req, "DD.MM.YYYY", CultureInfo.InvariantCulture );

// use this when you need to show that formatted date value
string formattedDate = dateValue.ToString("yyyy-MM-dd");

更好的方法是使用DateTime.TryParseExact Method,如果您希望它作为日期而不是字符串修改您的文化信息和日期分隔符。

CultureInfo enUS = new CultureInfo("en-US"); 
string dateString;
DateTime dateValue;
dateString = "05.01.2009"; 
if (DateTime.TryParseExact(dateString, "DD.MM.YYYY", enUS, 
                        DateTimeStyles.None, out dateValue))
   Console.WriteLine("Converted '{0}' to {1} ({2}).", dateString, dateValue, 
                     dateValue.Kind);
else
   Console.WriteLine("'{0}' is not in an acceptable format.", dateString);

答案 3 :(得分:1)

我认为你要做的是解析你的dd.MM.yyyy,然后将其显示为yyyy-MM-dd

首先,您必须将string解析为DateTime

DateTime date = DateTime.ParseExact(date_req, "yyyy-MM-dd", CultureInfo.InvariantCulture); 

现在date表示计算机实际理解的日期(在它只是一个字符串之前)。您现在可以随意显示此对象:

string yyyyMMdd = date.ToString("yyyy-MM-dd");
string arabic = date.ToString("yyyy-MM-dd", new CultureInfo("ar"));
// and so on

不要忘记,将日期从字符串转换为DateTime并返回时,文化和时区值得记住。

答案 4 :(得分:0)

首先以现有格式解析它,然后转换为您想要的字符串格式。

var date = DateTime.ParseExact(date_req, "dd.MM.yyyy", CultureInfo.InvariantCulture); 
var str = date.ToString("yyyy-MM-dd");

答案 5 :(得分:0)

您可以先将其转换为字符数组。然后你可以分别解析日/月/年的整数。你知道数字的索引,所以这很容易。之后,您可以按照自己喜欢的方式连接每个元素。

答案 6 :(得分:0)

错误。你有一个蛋糕,你想吃一个赌注。为了让你的胃相信那块蛋糕是一块木桩,你必须将蛋糕变成木桩。这是不可能做到的。解析就是接受一个值,并使用一个模式(或更多)将其转换为其他东西而不是转换它。所以你想要的可能是正确的,但你提出的是错误的。