日期时间时间戳具有句点而不是冒号

本文关键字:句点 时间 时间时间 时间戳 日期 | 更新日期: 2023-09-27 18:36:49

>我有一个包含两个日期时间列的数据表:date_from和date_to。

string dateFrom = row["date_from"].ToString();
string dateTo = row["date_to"].ToString();

在客户环境中运行此代码时,它将按以下格式返回日期:

"2016-01-01 00.00.00"
"2016-02-01 00.00.00"

然后将此字符串插入到 SQL 中:

SELECT * FROM my_table
WHERE UPPER(status) = 'N'
AND trans_date >= {ts '1900-01-01 00.00.00' }
AND trans_date <= {ts '1900-01-01 00.00.00' }

执行此 SQL 时,它会返回错误"从字符串转换日期和/或时间时转换失败"。

因此,解决此问题的快速方法是运行一个字符串。替换(),其中我用冒号替换句点:

dateFrom = dateFrom.Replace(".", ":");

但是,我的问题是为什么返回日期时带有句点作为时间戳分隔符而不是冒号?

我已经在本地计算机上创建了此测试,但不幸的是,对于这种情况,它返回了日期时间字符串的正确表示形式:

DataTable table = new DataTable();
table.Columns.Add("date", typeof(DateTime));
DataRow row = table.NewRow();
row["date"] = DateTime.Now;
table.Rows.Add(row);
DateTime date = DateTime.Parse(table.Rows[0]["date"].ToString());

到目前为止,我的猜测是它与客户文化有关,但我非常感谢有这方面的经验的人的意见,这样我就可以向客户反馈为什么会发生这种情况。

这可能只是一个巧合,但值得一提的是,这只发生在使用 Windows 10 的用户身上。每个使用 Windows 7 的人都不会收到此错误。

日期时间时间戳具有句点而不是冒号

正如你所说,这是关于客户文化的。具体CultureInfo.DateTimeFormat.

此属性返回一个 DateTimeFormatInfo 对象,该对象定义显示日期和时间的区域性适当的格式。

此对象具有一个属性 TimeSeparator,该属性获取或设置分隔时间组成部分(即小时、分钟和秒)的字符串。

您可以设置此属性以指定分隔符,如 :

但是,更好的方法是将特定区域性传递给ToString()方法,如 CultureInfo.InvariantCulture(与区域性无关):

string dateFrom = ((DateTime)row["date_from"]).ToString(CultureInfo.InvariantCulture);
string dateTo = ((DateTime)row["date_to"]).ToString(CultureInfo.InvariantCulture);

或使用您自己的格式:

string dateFrom = ((DateTime)row["date_from"]).ToString("yyyy-MM-dd HH:mm:ss");
string dateTo = ((DateTime)row["date_to"]).ToString("yyyy-MM-dd HH:mm:ss");