服务器中的日期格式正在发生变化

Posted

技术标签:

【中文标题】服务器中的日期格式正在发生变化【英文标题】:Date format is getting change in server 【发布时间】:2021-09-29 11:59:12 【问题描述】:

您好,我从 db 中获取日期,其中日期列的类型为“Date”,然后将其拆分并连接成一个字符串以存储在 db 中

Protected Sub btClick(sender As Object, e As EventArgs)
Dim dtMembers As DataTable = ViewState("dtMembers")
For i As Integer = 0 To dtMembers.Rows.Count - 1
                    For j As Integer = 0 To dtMembers.Columns.Count - 1
                        strMembers = strMembers + dtMembers.Rows(i)(j).ToString() + "#"
                    Next
                    strMembers = strMembers.Substring(0, strMembers.Length - 3) + "|"
                Next
                strMembers = strMembers.Substring(0, strMembers.Length - 1)
''then inserting it in db
End sub

在从本地环境执行程序时,它工作正常,时间存储为 28-09-2021 15:34:42,同时通过服务器执行程序,它以 12 小时格式存储 28-09-2021 03:34:42PM创建问题并抛出错误。 任何想法如何解决此问题将不胜感激。

【问题讨论】:

你没有显示任何 sql。 @OldProgrammer Sql = "INSERT INTO pbl(dtval) values ('" + strMembers+ "') date 是 strMembers 中的串联成员之一 @Shivam 请NOT使用字符串连接构建SQL语句;使用bind variables。 你到底为什么要取一个日期(“从数据库中获取日期,其中日期列的类型为“日期”)然后“拆分它”(大概是拆分DATE 数据类型中固有的日期和时间组件),然后将它们连接回一个字符串,并将该字符串存储回其他列?首先,这是浪费精力,其次,将 DATE 存储为 DATE 数据类型以外的任何数据类型(您说您已经拥有)是一个非常严重的设计缺陷。 【参考方案1】:

在 Oracle 中,DATE 数据类型以二进制格式存储,由 1 个字节组成,分别代表世纪、世纪、月、日、小时、分钟和秒。

DATE 数据类型确实存储任何格式信息。

例如:

CREATE TABLE table_name ( date_column DATE ); 

INSERT INTO table_name ( date_column ) 
VALUES ( TO_DATE( '28-09-2021 15:34:42', 'DD-MM-YYYY HH24:MI:SS' ) );

SELECT DUMP(date_column)
FROM   table_name;

输出:

DUMP(DATE_COLUMN)
Typ=12 Len=7: 120,121,9,28,16,35,43

原始日期值为 7 个字节:

世纪 + 100 世纪 + 100 月 天 小时 + 1 分钟 + 1 秒 + 1

没有任何内容告诉您如何在显示 DATE 时对其进行格式化,并且数据库只会知道这些二进制值。


如果您想显示DATE,那么它的显示格式完全取决于您使用的客户端应用程序。

例如,在 SQL/Plus 或 SQL Developer 中,它由用户的会话参数控制,the default display format 取决于您在世界的哪个位置。

在第三方应用程序中,显示格式与数据库无关;因此您需要在 VB 中设置该格式(通常在您的应用程序中以编程方式)。

通过服务器执行程序时,它以 12 小时格式存储 28-09-2021 03:34:42PM

不,如上所述,它不存储任何格式信息,也不存储为 12 小时制。

您需要在检索日期时将其格式化为所需的格式。


Sql = "INSERT INTO pbl(dtval) values ('" + strMembers+ "')"

日期是strMembers中的串联成员之一

使用字符串连接构建查询是一种不好的做法,因为它会导致 SQL 注入问题。

相反,您的陈述应该是:

Sql = "INSERT INTO pbl(dtval) values (:date_value)"

然后您应该将参数值添加为bind variables。

【讨论】:

以上是关于服务器中的日期格式正在发生变化的主要内容,如果未能解决你的问题,请参考以下文章

如果给定的日期格式发生变化,如何格式化日期字符串

以编程方式打开文件时,日期格式/值会发生变化

如果开始日期和结束日期跨越一个或多个月,则插入表格时日期格式会发生变化

node.JS 中的日期格式

当我打开 Visual Studio 时,MFC 日期时间选择器格式发生变化

在变量中设置日期格式