Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

调用 new CSRedis.CSRedisClient(null, redisConnect);方法后,DateTime.Now默认格式发生了改变。 #31

Open
billsking opened this issue Sep 26, 2018 · 7 comments

Comments

@billsking
Copy link

在 new CSRedis.CSRedisClient之前,DateTime.Now的格式为yyyy/MM/dd,调用之后MM/dd/yyyy。如图所示:
d1
d2

@2881099
Copy link
Owner

2881099 commented Sep 26, 2018

new CSRedis.CSRedisClient(null, redisConnect); 没有做区域化操作

@billsking
Copy link
Author

image
在源码里找到了这个。但这里区域化操作是硬编码的方式, 怎样通过传参的形式调用?

@2881099
Copy link
Owner

2881099 commented Sep 26, 2018

还有这个操作,没深入内部看,不确定原作者的逻辑。目前使用没有被这块影响。

可以先在 new CSRedis.CSRedisClient(null, redisConnect); 后,再次设置 CultureInfo.DefaultThreadCurrentCulture 解决当前问题,待查明原因后再做优化。

@billsking
Copy link
Author

我就是被坑了的。系统中有部分位置涉及到获取当前时间, 然后将时间ToString(),拼接成sql的条件。就导致筛选出的结果有问题。作者两句注释:
// use invariant culture - we have to set it explicitly for every thread we create to
// prevent any floating-point problems (mostly because of number formats in non en-US cultures).
大概意思是,为了处理浮点数的问题。本人英语不太好,所以理解上可能会有问题。

@2881099
Copy link
Owner

2881099 commented Sep 26, 2018

确实比较坑,我深入了解一下。

@2881099
Copy link
Owner

2881099 commented Sep 26, 2018

额外一个建议,sql拼接最好不要用 DateTime.Now.ToString(),不安全。

我这边拼接 sql 基本都传 ToString("yyyy-MM-dd HH:mm:ss")

@2881099
Copy link
Owner

2881099 commented Sep 26, 2018

从注释看来这行代码还真不能去掉。
csredis 命令是用字符拼接,如果没有固定区域化,很可能导航拼接的命令(特别是浮点数)格式不正常(比如中国,或某个偏避国家的数字表示法),导致 redis-server 解析报错。
当然如果系统是en-US应该不会有问题。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants