无法从'string'转换为'System.IFormatProvider'

时间:2014-09-07 15:33:05

标签: c# asp.net

这段代码给了我这个错误:

var n = "9/7/2014 8:22:35 AM";
var m = n.ToString("yyyy-MM-dd'T'HH:mm:ssZ");

但是这段代码可以正常工作,并以正确的格式返回日期。

var n = DateTime.Now;
var m = n.ToString("yyyy-MM-dd'T'HH:mm:ssZ");

任何人都知道为什么第一个代码不起作用以及如何使其正常工作?

2 个答案:

答案 0 :(得分:19)

您需要了解静态类型的工作原理。在第一个中,n的类型为string。类型string确实有ToString()方法,但该方法不带参数并返回相同的字符串对象,或者它需要格式提供程序。由于您提供了参数,因此编译器假定您指的是第二个版本,但类型不匹配。

您可能要做的就是首先将字符串转换为日期,这可以通过使用DateTime的{​​{1}}或Parse方法解析它来完成:

TryParse

在此,我们将var n = DateTime.Parse("9/7/2014 8:22:35 AM"); 转换为stringDateTime的类型为n

我认为在你弄清楚C#时使用DateTime 可能是一个好主意。如果明确列出类型,您将更好地了解正在发生的事情,编译器将更早地标记错误。在这种情况下,你会在第一行得到错误,这很明显。它会抱怨将字符串分配给var。关于DateTime没有奇怪的东西,这一点并不明显。你的代码看起来像这样:

IFormatProvider

在这个例子中,你会在第一行得到一个错误,然后你可以清楚地看到你正在尝试分配一个文字值(字符串“9/7/2014 8:22:35 AM”)将DateTime n = "9/7/2014 8:22:35 AM"; string m = n.ToString("yyyy-MM-dd'T'HH:mm:ssZ"); 键入string类型的变量,该变量无效。

答案 1 :(得分:1)

var n = "9/7/2014 8:22:35 AM";

这被视为String。你可以尝试这个工作

var n = DateTime.Parse("9/7/2014 8:22:35 AM");

var n = DateTime.Now;

这是一个DateTime对象