C#时间格式

antcy_18 2013-12-11 03:18:07
C#时间格式转换成SQL语句时 经常是根据本机里控制面板里设置的格式来转变的
这种情况下,就有一个问题,如果客户端在不同时间格式下运行,再去与SQL里的时间字段做比较就会出问题,
有什么办法,可以来解决这种与具体机器时间格式无关性问题。

如:***.time >'2013/12/10 星期二 10:55:01'
从字符串转换日期和/或时间时,转换失败。
...全文
748 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
琴弦里的海 2013-12-12
  • 打赏
  • 举报
回复
要想不出错,建议先转换统一格式,然后再比对。
antcy_18 2013-12-12
  • 打赏
  • 举报
回复
引用 18 楼 xiaobn_cn 的回复:
[quote=引用 13 楼 antcy_18 的回复:] 数据库里同样是datetime类型,而且我GETDATE返回的类型就是("yyyy-MM-dd HH:mm:ss.fff"),我之前也是像你说的,做为参数传入SQL,当然不是这种SqlCommand.Parameters, 而是 string.Format("select ** FROM dbo.* WHERE TM>'{0}' ORDER BY TM desc",time(变量));time在某些更改了时间格式的电脑上,就是变成了'2013/12/10 星期二 10:55:01'
楼主的这个做法实际上是在客户端对datetime的变量值进行了格式化,且没有指定格式,然后在sql执行时在服务器端再把字符串转换回datetime。无法理解楼主为什么不使用parameter这种方式传递参数呢?如果使用拼接字符串的方式就只能在两个转换的位置指定相同的格式来解决。[/quote] 我用了parameter ,还是一样的提示格式转化错误 、
xiaobn_cn 2013-12-12
  • 打赏
  • 举报
回复
引用 13 楼 antcy_18 的回复:
数据库里同样是datetime类型,而且我GETDATE返回的类型就是("yyyy-MM-dd HH:mm:ss.fff"),我之前也是像你说的,做为参数传入SQL,当然不是这种SqlCommand.Parameters, 而是 string.Format("select ** FROM dbo.* WHERE TM>'{0}' ORDER BY TM desc",time(变量));time在某些更改了时间格式的电脑上,就是变成了'2013/12/10 星期二 10:55:01'
楼主的这个做法实际上是在客户端对datetime的变量值进行了格式化,且没有指定格式,然后在sql执行时在服务器端再把字符串转换回datetime。无法理解楼主为什么不使用parameter这种方式传递参数呢?如果使用拼接字符串的方式就只能在两个转换的位置指定相同的格式来解决。
bu_ge 2013-12-12
  • 打赏
  • 举报
回复
引用 7 楼 antcy_18 的回复:
各位还是没看清我的要求, shiyong7682719:你这种去掉,我直接toString就搞定 bf6543:我本来就是DateTime,现在是DATETIME转字符串,根据本机控制面板里的设置转字符串里,会转成不同的格式。 我的要求:1.不能每碰到一个时间,我都要求手工的去ToString("yyyy-MM-dd HH:mm:ss.fff") , 2.当然如果实在没有办法,那也就只能ToString("yyyy-MM-dd HH:mm:ss.fff") , 但是另一个问题是SQL默认的时间格式是可变,还是不变的呢?
1.既然你知道原因,可以先Program同步客户端和服务器时间 2.你测一下就知道了,不会影响sql
超级橡树 2013-12-11
  • 打赏
  • 举报
回复
你在向数据库中存储该时间数据时就可以先强制转化成某格式,对比时自然要转化成相应的格式进行对比。没有其他的办法绕过去的。
gw6328 2013-12-11
  • 打赏
  • 举报
回复
引用 10 楼 antcy_18 的回复:
[quote=引用 9 楼 jinfengyiye 的回复:] 坑啊,楼主数据库里时间如果也是时间格式就不用怕一不一致了啊.只要控制显示一致就行了. 但是一般情况也是一致的啊.
不知道理解是不是有问题,你是说,客户端的时间格式,与SQL的时间格式一致是吗? 客户端的时间格式,根据控制面板设定。sql数据库,跟这个控制面板设定无关 [/quote] 我的意思是你数据库用时间类型就不会有这种困扰,你现在为数据库字段是用的字符类型吗?
  • 打赏
  • 举报
回复
化范伟健
antcy_18 2013-12-11
  • 打赏
  • 举报
回复
楼主要理解两个关键点: 1. 时间类型的变量是没有格式的,包括数据库中的存储date类型的字段。 2. 只有时间类型转换为字符串时才需要指定格式。 楼主遇到的格式不一致的问题,得看数据库中你的存储的列的类型是date还string。 1. date类型:不需要转换,直接把程序中的datetime变量做为参数传入sql中就可以了。 2. string类型:那么要数据库设计时必定要为该字段指定时间的格式化方式,程序的中datetime也按这个格式转换就可以了。[/quote] 数据库里同样是datetime类型,而且我GETDATE返回的类型就是("yyyy-MM-dd HH:mm:ss.fff"),我之前也是像你说的,做为参数传入SQL,当然不是这种SqlCommand.Parameters, 而是 string.Format("select ** FROM dbo.* WHERE TM>'{0}' ORDER BY TM desc",time(变量));time在某些更改了时间格式的电脑上,就是变成了'2013/12/10 星期二 10:55:01'
xiaobn_cn 2013-12-11
  • 打赏
  • 举报
回复
引用 7 楼 antcy_18 的回复:
各位还是没看清我的要求, shiyong7682719:你这种去掉,我直接toString就搞定 bf6543:我本来就是DateTime,现在是DATETIME转字符串,根据本机控制面板里的设置转字符串里,会转成不同的格式。 我的要求:1.不能每碰到一个时间,我都要求手工的去ToString("yyyy-MM-dd HH:mm:ss.fff") , 2.当然如果实在没有办法,那也就只能ToString("yyyy-MM-dd HH:mm:ss.fff") , 但是另一个问题是SQL默认的时间格式是可变,还是不变的呢?
楼主要理解两个关键点: 1. 时间类型的变量是没有格式的,包括数据库中的存储date类型的字段。 2. 只有时间类型转换为字符串时才需要指定格式。 楼主遇到的格式不一致的问题,得看数据库中你的存储的列的类型是date还string。 1. date类型:不需要转换,直接把程序中的datetime变量做为参数传入sql中就可以了。 2. string类型:那么要数据库设计时必定要为该字段指定时间的格式化方式,程序的中datetime也按这个格式转换就可以了。
天齐贺少 2013-12-11
  • 打赏
  • 举报
回复
没有其他办法,只有在程序对比的时候转换当前时间,或则在SQL对比的时候转换参数。 如果是web的话,设置下服务器时间格式就行,客户端,只能手工转换
antcy_18 2013-12-11
  • 打赏
  • 举报
回复
引用 9 楼 jinfengyiye 的回复:
坑啊,楼主数据库里时间如果也是时间格式就不用怕一不一致了啊.只要控制显示一致就行了. 但是一般情况也是一致的啊.
不知道理解是不是有问题,你是说,客户端的时间格式,与SQL的时间格式一致是吗? 客户端的时间格式,根据控制面板设定。sql数据库,跟这个控制面板设定无关
gw6328 2013-12-11
  • 打赏
  • 举报
回复
坑啊,楼主数据库里时间如果也是时间格式就不用怕一不一致了啊.只要控制显示一致就行了. 但是一般情况也是一致的啊.
wwwaone 2013-12-11
  • 打赏
  • 举报
回复
顶楼上....
antcy_18 2013-12-11
  • 打赏
  • 举报
回复
各位还是没看清我的要求, shiyong7682719:你这种去掉,我直接toString就搞定 bf6543:我本来就是DateTime,现在是DATETIME转字符串,根据本机控制面板里的设置转字符串里,会转成不同的格式。 我的要求:1.不能每碰到一个时间,我都要求手工的去ToString("yyyy-MM-dd HH:mm:ss.fff") , 2.当然如果实在没有办法,那也就只能ToString("yyyy-MM-dd HH:mm:ss.fff") , 但是另一个问题是SQL默认的时间格式是可变,还是不变的呢?
bu_ge 2013-12-11
  • 打赏
  • 举报
回复
为什么不先转换再sql查询呢 DateTime dt = Convert.ToDateTime("2013/12/10 星期二 10:55:01");
  • 打赏
  • 举报
回复
把星期几 去掉啊;


declare @s varchar(100),@FLAG INT
SET @FLAG=0
set @s='东长安街44号东方广场东5座1-2层 Level 1-2,Tower E5,Plaza,No.44 East Chang An Ave.  '
 
select SUBSTRING(@s,patINDEX('%[A-Z,a-z]%',@s)-1,len(@s))
 
antcy_18 2013-12-11
  • 打赏
  • 举报
回复
引用 2 楼 men52676521 的回复:
既然知道错误的地方了,那就改呗!
我希望找到一个统一的方法,而一不是,一个一个的改
antcy_18 2013-12-11
  • 打赏
  • 举报
回复
引用 1 楼 sj490790083 的回复:
存的时候转成同一种格式再存
所有SQL只有一种格式 吗? dateTime.ToString("yyyy-MM-dd HH:mm:ss.fff") ? 万一这种格式与SQL格式 不匹配呢,
men52676521 2013-12-11
  • 打赏
  • 举报
回复
既然知道错误的地方了,那就改呗!
sj490790083 2013-12-11
  • 打赏
  • 举报
回复
存的时候转成同一种格式再存

110,529

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧