将日期转换为正确的格式
Posted
技术标签:
【中文标题】将日期转换为正确的格式【英文标题】:Converting date to proper format 【发布时间】:2016-03-08 12:33:25 【问题描述】:我在 ms-sql 数据库中有一个表,其中包含如下列中的日期:
2010-06-24 00:00:00.000
然后在 c# 中,我使用语句获取这些日期并将其分配给一个变量,该变量填充使用 asp.net 制作的网页上的网格列。
SqlCommand command = new SqlCommand();
//connection info here
sql2 = "(select statement here);
command.CommandText = sql2;
dates["Entry"] = command.ExecuteScalar();
所以,这用正确的日期填满了网格,但是,我正在尝试格式化它,所以我只用斜杠得到月、日和年,而不是之后的时间。像这样:
06/24/2010
我尝试将其转换为日期时间并使用:
ToString("MM/dd/yyyy")
我尝试过使用阅读器并执行以下操作:
reader.GetDatetime.toString("MM/dd/yyy")
这也不起作用。我似乎无法找到正确的方法来做到这一点。任何提示都会很棒。
编辑:这是 sql2 语句:
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();
这只是获取用户输入内容的最近日期。
编辑 2: 网格中显示的日期类似于“3/12/2013 12:00:00 AM”。
编辑 3:.ExecuteScalar() 函数似乎将日期自动格式化为“3/12/2013 12:00:00 AM”类型的格式。
【问题讨论】:
【参考方案1】:只需将格式更改为yyyy-MM-dd
like;
dates["Entry"] = ((DateTime)command.ExecuteScalar()).ToString("yyyy-MM-dd",
CultureInfo.InvariantCulture);
【讨论】:
请问cultureinfo是什么?当我尝试使用它时,它是无效的。 @pfinferno 哦,对了,ExecuteScalar
返回object
。我假设您返回的列类型与 CLR 端的 DateTime
映射,您需要获取 DateTime
的 textual 表示。 InvariantCulture
保证生成您的 DateTime
值的公历表示。
哦,我明白了,谢谢您的回复!我尝试了你所做的,以及之前类似的事情。尽管“用户代码未处理 InvalidCastException”,但我收到此错误。 - 指定的演员表无效。
@pfinferno 您的 select 语句返回的第一列的类型是什么?
你是指SQL表中的列吗?当我转到列本身的属性时,它会显示 Data Type = datetime、System Type = datetime、Identity = False,以及一堆其他内容,如主键、允许空值等。【参考方案2】:
2010-06-24 如果你想显示这样的日期时间,你只需传递一个格式字符串“yyyy-mm-dd”,它看起来像这样:
string Date = new DateTime(2010, 6, 24).ToString("yyyy-mm-dd");
您可以在此链接中详细了解可以在 DateTime 上输出哪些格式: https://msdn.microsoft.com/en-us/library/zdtaw1bw(v=vs.110).aspx
【讨论】:
【参考方案3】:你也可以使用 ToShortDateString() 函数来截断时间字符串-:
reader.GetDatetime.ToShortDateString();
【讨论】:
【参考方案4】:在 sql 中尝试以下操作:
select CONVERT(datetime, column_name, 101) from table_name
101 - 是日期时间样式。您可以通过link找到所有样式
也在后面的代码中:
Convert.ToDateTime(reader["column"].ToString()).ToShortDateString();
希望对你有帮助
【讨论】:
以上是关于将日期转换为正确的格式的主要内容,如果未能解决你的问题,请参考以下文章