c# - 为什么日期时间字符串在一个 Windows 10 系统上填充为 0,而在大多数其他系统上却没有?
问题描述
几台机器上的以下代码将 SQL Server 日期时间字符串从“NOW”设置为同一日期,但在午夜。
DateTime deleteDateThreshold = DateTime.Now;
string deleteDateThresholdS = DateTime.Now.ToString();
deleteDateThresholdS = deleteDateThresholdS.Substring(0, 10) + " " + "00:00:00 AM";
想想看,我本可以减到午夜,但我认为这是一种更快的方法。
然后将字符串解析为 DateTime;并从中减去一天。一对一系统,解析失败,因为子字符串遇到了一个额外的字符,值为 2,因为日期字符串不是零填充的 (03/04/2020)。我终于能够捕捉到有问题的日期时间;而且它不是日期时间,所以应该发生异常。
这是解析的代码。
deleteDateThreshold = DateTime.Parse(deleteDateThresholdS, us);
deleteDateThreshold = deleteDateThreshold.AddDays(-1);
在大多数系统上,日期字符串看起来像这样
"03/04/2020 00:00:00 AM"
但是,在引发异常的系统上,日期不是用 0 填充的,字符串如下所示:
"3/4/2020 2 00:00:00"
为什么这个字符串中有一个 2,为什么月份和日期没有用 0 填充?
解决方案
想想看,我本可以减到午夜,但我认为这是一种更快的方法。
我想说<somedate>.Date
或者DateTime.Today
(谢谢,@ckuri)可能是在某个日期/今天到达(本地)午夜的最简单方法。(也许考虑在所有系统中使用 UtcNow)
您的问题的真正性质是什么,我目前不确定,但我几乎可以肯定,如果您将日期保留为日期并且没有转换成字符串来操纵它们,那么它就不会发生;SQL Server 具有映射到 CLR 数据类型的日期数据类型 - 根本不需要在此系统中将日期作为字符串存储、处理、传输或操作
推荐阅读
- angular - 无法使用角铯渲染折线
- javascript - ReactJS for 循环仅显示 firebase 查询中的最后一个值
- node.js - React Native CLI,找不到模块'/usr/local/lib/node_modules/react-native-cli/node_modules/prompt/lib/prompt'
- vue.js - 更改 Vuetify 上的标题默认字体
- algorithm - 我有两种用于 fib 问题的算法,1 需要 7 milsec,而其他算法需要 6 milsec,甚至第二种算法需要两次调用自身
- ios - 如何从 STPPaymentCardTextField 获取 YYYY 格式的到期年份
- mongodb - 无法通过 Internet 路由连接到本地 mongodb
- sql - 丢弃对象时丢弃的统计信息?
- php - ElasticSearch 索引得分
- powershell - Invoke-WebRequest -Uri 路径中的变量