当前位置:  开发笔记 > 编程语言 > 正文

将字符串转换为datetime的问题

如何解决《将字符串转换为datetime的问题》经验,为你挑选了1个好方法。

我在ms-sql数据库中有一个表,其中包含列中的日期,如下所示:

2012-10-31 00:00:00.000

此列列为"datetime"类型.如同在ms sql server管理工作室中,我展开表,然后是列,并查看日期(PK,datetime,not null).

然后在c#中,我得到那些带有语句的日期,并将其分配给一个变量,该变量填充了一个网页,该网页是用asp.net制作的网页.sql语句只是获取用户的最后一个条目.

        SqlCommand command = new SqlCommand();
        //connection info here
        sql2 = "select max(day) as day from users u join days d on d.User_ID = u.id where u.ActiveUser = 1 and u.id = " + Users["ID"].ToString();;
        command.CommandText = sql2;
        dates["Entry"] = command.ExecuteScalar();

这将填充列中的日期,如下所示:

10/31/2012 12:00:00 AM

现在,我不知道为什么会这样转换.我在调试时跟踪数据,并且使用command.ExecuteScalar()函数进行更改.我希望的格式是:

10/31/2012

没有hh/mm/ss AM.

我无法使任何DateTime转换/分析/格式化正常工作.我花了四天时间.我在这里问了一个类似的问题:将日期转换为正确的格式,尝试所有不同的建议.

我在此期间做的是:

string dt = command.ExecuteScalar().ToString();
dt = dt.Substring(0, dt.IndexOf(" ") + 1); 
dates["Entry"] = dt;

哪个删除了返回的日期字符串中的空格后的所有文本.这没关系,除了我想比较我得到的这些日期,所以我需要在DateTime中使用它们.试图将这些字符串转换为DateTime是行不通的.

编辑:定义和类型 -

DataRow dates;
//for loop here going through for each user
dates = _dtuserhours.NewRow(); // _dtuserhours is a DataTable
//Sql statements here
_dtuserhours = new DataTable("newtable");
DataColumn column;
column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "Entry";
_dtUserHours.Columns.Add(column);

The Sharp Ni.. 5

首先,您需要更改SQL字符串以使用命令参数,否则您将接受SQL注入攻击.

接下来,您可以在SQL Server中对DateTime字段的输出进行整形,以输出您要查找的格式.您获得的是DateTime的默认格式,具体取决于您的文化.

或者,您可以轻松地使用返回的DateTime对象的字符串formatter属性,如下所示:

dates["Entry"] = ((DateTime)command.ExecuteScalar()).ToString("MM/dd/yyyy");

编辑:改为尝试:

dynamic result = command.ExecuteScalar();
dates["Entry"] = result.ToString("MM/dd/yyyy");

编辑EDIT - 设置为动态,因为编译器不知道ExecuteScalar在编译时返回什么.



1> The Sharp Ni..:

首先,您需要更改SQL字符串以使用命令参数,否则您将接受SQL注入攻击.

接下来,您可以在SQL Server中对DateTime字段的输出进行整形,以输出您要查找的格式.您获得的是DateTime的默认格式,具体取决于您的文化.

或者,您可以轻松地使用返回的DateTime对象的字符串formatter属性,如下所示:

dates["Entry"] = ((DateTime)command.ExecuteScalar()).ToString("MM/dd/yyyy");

编辑:改为尝试:

dynamic result = command.ExecuteScalar();
dates["Entry"] = result.ToString("MM/dd/yyyy");

编辑EDIT - 设置为动态,因为编译器不知道ExecuteScalar在编译时返回什么.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有