首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从'string‘转换为'System.IFormatProvider’

无法从'string‘转换为'System.IFormatProvider’
EN

Stack Overflow用户
提问于 2014-09-07 23:33:05
回答 2查看 59.8K关注 0票数 12

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

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

但这段代码按其应有的方式工作,并以适当的格式返回日期。

代码语言:javascript
复制
var n = DateTime.Now;
var m = n.ToString("yyyy-MM-dd'T'HH:mm:ssZ");

有谁知道为什么第一个代码不能工作,以及如何让它工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-07 23:36:08

您需要了解静态类型是如何工作的。在第一个示例中,n的类型是string。类型string确实有一个ToString()方法,但该方法要么不接受参数并返回相同的string对象,要么接受格式提供程序。由于您提供了一个参数,编译器假定您指的是第二个版本,但是类型不匹配。

也许您想要做的是首先将字符串转换为日期,这可以通过使用DateTimeParseTryParse方法解析它来实现:

代码语言:javascript
复制
var n = DateTime.Parse("9/7/2014 8:22:35 AM");

在这里,我们将string转换为DateTimen的类型为DateTime

我认为在理解C#时不使用var可能是个好主意。如果您显式地列出了这些类型,您将更好地了解发生了什么,并且编译器会更早地标记错误。在这种情况下,您将在第一行得到错误,这将是显而易见的。它会抱怨将一个字符串分配给一个DateTime。关于IFormatProvider没有什么奇怪的东西,这一点一点也不明显。您的代码将如下所示:

代码语言:javascript
复制
DateTime n = "9/7/2014 8:22:35 AM";
string m = n.ToString("yyyy-MM-dd'T'HH:mm:ssZ");

在本例中,您将在第一行得到一个错误,然后您可以清楚地看到,您正在尝试将类型为string的文字值(字符串"9/7/2014 8:22:35 AM")赋给类型为DateTime的变量,这是不能工作的。

票数 27
EN

Stack Overflow用户

发布于 2014-09-07 23:35:22

代码语言:javascript
复制
var n = "9/7/2014 8:22:35 AM";

这将被视为字符串。你可以试着这样做

代码语言:javascript
复制
var n = DateTime.Parse("9/7/2014 8:22:35 AM");

代码语言:javascript
复制
var n = DateTime.Now;

这是一个DateTime对象

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25711907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档