问题现象:发现个别程序,开发环境和测试环境都好用,但生产环境(在南非)报错。
问题定位:通过抓取生产环境日志定位问题为查询的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小时制的。

总结:主题就是客户端、服务端都显示的约定转换格式。


OldQ
1 声望1 粉丝