BsonDateTimeOptions не устанавливает локальную дату и время - PullRequest
2 голосов
/ 23 декабря 2019

Несмотря на то, что я Datetime украсил свое свойство BsonDateTimeOptions, оно все равно не работает и время вставлено в базу данных, на 3 часа меньше моего местного времени. (Я думаю, что это utc)
Мой базовый абстрактный класс

public abstract class MongoBaseModel
{
    public ObjectId Id { get; set; }

    [BsonElement]
    [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
    public DateTime InsertedAt{ get; set; }
} 

Моя сущность

public class RockSongs:MongoBaseModel
{
    [BsonElement("Name")]
    public string Name { get; set; }

    [BsonElement("Singer")]
    public string Singer { get; set; }
}

БД версии v4.2.1

MongoDb.Driver 2.7.2

1 Ответ

2 голосов
/ 23 декабря 2019

Согласно документации :

MongoDB по умолчанию сохраняет время в формате UTC и преобразует любые представления местного времени в эту форму. Приложения, которые должны работать или сообщать о некотором неизмененном значении местного времени, могут хранить часовой пояс вместе с меткой времени UTC и вычислять исходное местное время в логике своих приложений.

Нет разницы между DateTimeKind.Localи DateTimeKind.Utc когда дело доходит до сериализации . В обоих случаях ваш .NET DateTime будет храниться как UTC. Момент, когда этот атрибут становится полезным, - десериализация . Драйвер MongoDB .NET автоматически преобразует дату в формате UTC в часовой пояс вашего локального компьютера, если вы примените DateTimeKind.Local.

Тот факт, что MongoDB сохраняет даты в формате UTC, напрямую связан со спецификацией BSON .

...