不同时区的日期时间变化

问题描述 投票:0回答:1

我遇到了问题,目前不知道如何解决。所以在这里,我在数据库中有一个日期列,如下所示:

31-Oct-24

如果我检查以下查询:

select TO_CHAR(m.START_DATE, 'HH24:MI:SS') START_DATE from UserDetails m;

它返回以下内容:

00:00:00

这意味着没有时间部分。我们有一个现有的 WPF 项目,它获取数据和日期以及以下内容:这是传递到 WPF 项目的 SOAP 服务

SOAP 服务:

DataSet tempDataSet = new DataSet();

using (OracleDataAdapter adapter = new OracleDataAdapter(cmd))
{
  adapter.ReturnProviderSpecificTypes = false;
  adapter.Fill(tempDataSet);
}

tempDataSet.Tables[0].Rows[0]["START_DATE"];

在WPF项目中,有以下数据未经转换:

DataTable table = SRO.FindData(LoginData.Ticket, LoginData.Session, LoginData.ActAsRoleId, Where);

当日期进入WPF项目并且客户端机器具有UTC-5时区时,则日期转换为:

30-Oct-24 02:00:00

这意味着保存在数据库中的日期会转换为系统时区。我不确定为什么会发生这种情况,我尝试将日期转换为字符串以强制执行日期(它无法转换,因为它是

DateTime
类型)以及强制省略
DateTime
中的日期。但没有什么可以阻止它进入系统时区。有什么方法可以解决此问题,因为我无法在 WPF 项目中进行任何更改,因此更喜欢从 SOAP Services 本身处理此问题?

c# .net datetime .net-4.8 oracle19c
1个回答
0
投票

我不确定那里发生了什么,因为您没有共享代码显示您正在保存/存储日期时间的位置,但这是我的建议

  1. 保存时,使用

    dateTime.UtcNow
    代替
    dateTime.Now
    现在解决您当前的问题使用

    string mytime = yourDateTime.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ");

© www.soinside.com 2019 - 2024. All rights reserved.