Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 错误“;字符串未被识别为有效的日期时间”;_C# - Fatal编程技术网

C# 错误“;字符串未被识别为有效的日期时间”;

C# 错误“;字符串未被识别为有效的日期时间”;,c#,C#,我有以下两个字符串值: Test1=“2020-01-29T00:00:00Z” Test2=“29/01/2020 00:00:00” 我正在做这个比较: (DateTime.ParseExact(Test2.ToString(), "dd/M/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture).ToString("yyyy'-'MM'-'dd'T'00':'00':'00'Z'") != (DateTime.ParseExact(Test1[

我有以下两个字符串值:

  • Test1=“2020-01-29T00:00:00Z”

  • Test2=“29/01/2020 00:00:00”

我正在做这个比较:

(DateTime.ParseExact(Test2.ToString(), "dd/M/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture).ToString("yyyy'-'MM'-'dd'T'00':'00':'00'Z'") != (DateTime.ParseExact(Test1["ProjectDateSinged"].ToString(), "yyyy'-'MM'-'dd'T'00':'00':'00'Z'", CultureInfo.InvariantCulture)).ToString()))
但这将引发以下例外情况:

错误“字符串未被识别为有效的日期时间”


有人能找到我的代码有什么问题吗?

将我的注释扩展为答案,您应该稍微更新一下格式字符串。对于
Test2
您应该使用
dd/MM/yyyy hh:MM:ss
格式

根据
MM
用于从
01
12
的月数,
M
1
12
。您有
01
月号,因此应使用
MM

您的日期中也没有AM/PM表示,因此也不需要
tt

您可以将
Test2
解析为日期

var Test2=“29/01/2020 00:00:00”; var result=DateTime.ParseExact(Test2,“dd/MM/yyyy hh:MM:ss”,CultureInfo.InvariantCulture); 对于
Test1
,您可以使用
yyyy-MM-ddThh:MM:ssK
(解析包含时区信息的日期)或
yyy-MM-ddThh:MM:ss'Z'
,而不使用时区信息

要比较日期,不需要将它们转换回字符串。您可以使用
DateTime
struct的属性简单地获取日期组件。下面的代码返回
true

var result=DateTime.ParseExact(Test1,“yyyy-MM-ddThh:MM:ss'Z',CultureInfo.InvariantCulture)。日期==
ParseExact(Test2,“dd/MM/yyyy hh:MM:ss”,CultureInfo.InvariantCulture);
此外,仅通过比较两个
DateTime
实例

var result=DateTime.ParseExact(Test1,“yyyy-MM-ddThh:MM:ss'Z'”,CultureInfo.InvariantCulture)==
ParseExact(Test2,“dd/MM/yyyy hh:MM:ss”,CultureInfo.InvariantCulture);

通过查看示例,格式如下所示。。您可以通过指定格式来编写通用方法。像下面这样-

private static DateTime ParseDate(string providedDate)
{
    DateTime validDate;
    string[] formats = {  "dd/MM/yyyy hh:mm:ss", "yyyy-MM-dd'T'hh:mm:ss'Z'" };
    var dateFormatIsValid = DateTime.TryParseExact(
        providedDate,
        formats,
        CultureInfo.InvariantCulture,
        DateTimeStyles.None,
        out validDate);
    return dateFormatIsValid ? validDate : DateTime.MinValue;
}
并调用此方法来解析字符串

 var test1 = ParseDate("2020-01-29T00:00:00Z");
 var test2 = ParseDate("29/01/2020 00:00:00");

 Console.WriteLine(test1 == test2); // result TRUE

使用此代码然后成功工作

尝试使用
MM
而不是
M
一个月。这是否回答了您的问题@PavelAnikhouski我试过这个,但我还是会得到同样的error@testtest请看一看我的答案我想也许应该有一个标准的重复的封闭式问题目标,用于这些“为什么我的DateTime.ParseExact不解析这个字符串”当格式不完全匹配时。我尝试用MM替换M,但仍然得到相同的结果error@testtest您还应该删除答案中所述的
tt
。请检查itok谢谢,但我不确定这是什么原因(DateTime.ParseExact(Test1[“ProjectDateSigned”].ToString(),“yyyy'-'MM'-'dd'T'00':'00':'00':'00'Z',CultureInfo.InvariantCulture))。ToString()将返回以下日期
29/01/2020 00:00:00“
??@testtest,因为您在使用
引号进行分析时跳过了时间组件。”。要获得正确的日期,您需要
yyyy-MM-ddThh:MM:ss'Z'
(省略时区)或
yyy-MM-ddThh:MM:ssK
(使用时区)我指的是
(DateTime.ParseExact(Test1[“projectDateSigned”].ToString(),“yyyy'-MM'-'dd'T'00':'00':'00':'00':'00':'00'Z',CultureInfo.InvariantCulture)).ToString())
应按如下方式返回字符串
2020-01-29T00:00:00z
,而不是按
29/01/2020 00:00:00
。。这是正确的吗?
        string Test1 = "2020-01-29T00:00:00Z";

        string Test2 = "29/01/2020 00:00:00";


        DateTime dt = Convert.ToDateTime(Test1, CultureInfo.InvariantCulture);

       MessageBox.Show("" + dt.ToString("yyyy-MM-ddT00:00:00Z"));