每次在使用 StrToDate 或 DateToStr 我总是提心掉胆的 VCL组件开发及应用http://www.delphi2007.net/DelphiVCL/html/delphi_20061220141719247.html
每次在使用 StrToDate 或 DateToStr 我总是提心掉胆的
因为 我的数据是在客户端用 DateToStr 转成 字符串发到服务器的
服务器再用 StrToDate 转成 TDate 的
现在没什么问题, 我怕万一客户端的日期格式与服务器不一下, 会转失败的. 如何办呢?
有没有统一的方法?
我知道可以用 FormatDateTime 来生成指定格式的string
但如果把这个字符串反变成 TDate 呢? strtodate 也许是不行的
用 FormatDateTime 转换比较好的,比如FormatDateTime('yyyymmdd',Now());如果是Sql Server,数据库会自己识别和转换传来的字符串,关系不大。
如果 客户端,服务端都是你做的话
在程序初始化时都
ShortDateFormat := 'yyyy-mmm....
LongDateFormat := 'yyyy-mmm....
给这两个全局量给个值,这样日期格式就不由系统设置变了
FormatDateTime 统一标准 例如 2005-09-28 就可以了 楼上踢踏正解!
为什么要转成字符串呢,datetime本来就是浮点型的值,直接传不就行了。
传数值应该比穿字符快!
我必须要把它传成 String . 系统需要
日期转double,double再转字符串! 用double传数据!
到服务器端,字符串转double,double再转日期!
在程序中将日期利用formatdatetime('yyyy-mm-dd',now())
这样保证格式能够一致
如果用datetostr有时会以字符串中有汉字(我就遇到过)
所以我觉得还是 formatdatetime较好
日期转double,double再转字符串! 用double传数据!
double 转 string 太长了
在程序中将日期利用formatdatetime('yyyy-mm-dd',now())
这样保证格式能够一致
如果用datetostr有时会以字符串中有汉字(我就遇到过)
所以我觉得还是 formatdatetime较好
------------------------
关键是 用 formatdatetime('yyyy-mm-dd',now())
得到的 String 如何再转成 TDateTime
如果是Sql Server数据库,传Double型数据不理想的,原因是Sql Server和Delphi定义的时间起点是不一致的,相差了几天,大家可以自己看看
select convert(datetime,0) ----》 1900-01-01 00:00:00.000
DateTimePicker1.DateTime:=0 ----》 1899-12-30
那就用记录或者列表打包嘛...分别把年月日放到不同的字段里
如果是SOAP通信,那就更容易了,直接打成XML包