如何使用NodaTime保存时间戳?

时间:2014-11-10 22:05:30

标签: datetime datetimeoffset nodatime

我使用基本的UtcNow进行以下实现,然后将其转换回UI。 这种情况下的目的非常简单。 当我将新客户端插入数据库时​​,我将其转换为UtcNow,所以我有一个这个记录的时间戳。 当我将其显示给用户时,我将其转换为本地(例如:您是“dd / MM / yyyy”以来的成员)。

这是我的实施。我想知道如何通过NodaTime完成这项工作。而且,如果有人有更好的方法,我会很高兴听到!

public interface IDateTime
{
    DateTime ToUtcNow { get; }
    DateTime FromUtc(DateTime dateTimeToConvert);
}

public class DateTimeProvider : IDateTime
{
    public DateTime ToUtcNow
    {
        get { return DateTime.UtcNow; }
    }

    public DateTime FromUtc(DateTime dateTimeToConvert)
    {
        return dateTimeToConvert.ToLocalTime();
    }
}

另外,我应该如何将它保存到数据库,在本例中为Sql Server。我应该使用哪种数据类型? DateTime,DateTimeOffset?代码怎么样? OffsetDateTime,ZonedDateTime我对此非常困惑。我已经阅读了用户指南,但它显示了更复杂的情况,我无法在如此简单的情况下实现它。

提前致谢!

1 个答案:

答案 0 :(得分:2)

听起来您正在尝试及时存储积分,无论日历系统或时区如何。这些在Noda Time中由Instant值表示。因此,在大多数代码中,您可能应该使用它来表示时间戳。 (这也是IClock.Now会给你的。)

但是,你的数据库不太可能知道Noda Time ...我建议你应该存储一个DateTimeOffset,你可以通过Instant.ToDateTimeOffset获得{和{' s { {1}}也是。这将始终具有0的偏移量,但至少它对于它所代表的时间点并不含糊。