gpt4 book ai didi

c# - 如何为 MongoDB 关闭 UTC 时区

转载 作者:行者123 更新时间:2023-12-03 19:08:24 27 4
gpt4 key购买 nike

由于 MongoDB stores times in UTC by default.,我将下面的扩展用于 MongoDB 日期字段

    public static class DateTimeExtensions {

public static DateTime AdjustUtcDiffByOffset(this DateTime time) {
return time.AddHours(DateTimeOffset.Now.Offset.Hours);
}
}
}

尽管我在应用程序级别尝试了一些方法,例如 .NET 中的属性或序列化方法,但它们都会导致不同的问题。我现在决定在 .NET 中使用这个扩展,但我认为这也不是一个完整和准确的解决方案。
这个问题有什么解决办法 在数据库级别 不依赖于带有调整或其他东西的编程语言?
编辑
我认为我应该在下面的评论后进行更多解释。如上所示,我已经知道 MongoDB 以 UTC 格式存储在这篇文章中链接的时间。这可能很有用,但我的应用程序中不需要任何 UTC 时区差异,而且我不想分别处理每种编程语言的表示层。而且,我什至不希望在其他层中只需要一个额外的行或函数,因为除了基本逻辑或业务之外。
让我的架构承担这个。我很懒惰,生命真的很短,鸟儿在外面飞:) 我不希望不同的字段像不必要的字符串转换一样。由于我在应用程序中进行了很多时间计算,因此我需要在数据库中使用日期时间类型。
我现在使用 .NET,因此 MongoDB .NET driver .我尝试了不同的序列化方法,但它在数据访问架构中引起了另一个问题。 总之,我可以在我的另一个应用程序中使用 UTC,但我现在不想要它,当我分配给字段时,我更喜欢本地时间 .我决定特别为 C# 使用下面的封装。
    private DateTime _startTime;
public DateTime StartTime {
get => _startTime;
set => _startTime = new DateTime(value.Ticks, DateTimeKind.Utc);
}

最佳答案

我认为从 db 级别是不可能的。我所做的是为日期属性编写自定义 setter ,这将强制 mongoDB 假设时间已经在 UTC 中,从而避免如下转换:

private DateTime _createdUTC;
public DateTime CreatedUtc
{
get
{
return _createdUTC;
}
set
{
_createdUTC = new DateTime(value.Ticks, DateTimeKind.Utc);
}
}

关于c# - 如何为 MongoDB 关闭 UTC 时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62978436/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com