问题现象:发现个别程序,开发环境和测试环境都好用,但生产环境(在南非)报错。
问题定位:通过抓取生产环境日志定位问题为查询的sql语句中,日期参数传入的格式有问题,类似 to_char(date1,'yyyy-mm-dd') = 'xxxxxxx'
问题原因:xxxxxxx 此处为客户端获取的参数,取到时间之后进行ToString(),没有进行固定的格式约定,这样当客户机设置的日期格式不用,可能就会出现问题,特别当有国外用户时。
所以,此问题很好定位,但是需要研发人员有意识来认识到客户端和服务端之间,传递参数需要显示的进行格式约定。
以下为 C# 中时间转换字符串
DateTime dt = DateTime.Now;
string a = dt.ToString("yyyy/MM/dd HH:mm:ss ffffff");
string b = dt.ToString("yyyy-MM-dd HH:mm:ss");
string c = dt.ToString();//出问题的即这种写法
以上执行分别对应
2020/03/30 19:22:13 536918
2020-03-30 19:22:13
20/03/30 19:22:13//此处具体是什么,和当前执行的机器设置的时间格式有关系
oracle 中 时间转字符串 to_char(date,'yyyy/mm/dd hh24:mi:ss') 24小时制的。
总结:主题就是客户端、服务端都显示的约定转换格式。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。