我使用基本的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我对此非常困惑。我已经阅读了用户指南,但它显示了更复杂的情况,我无法在如此简单的情况下实现它。
提前致谢!
答案 0 :(得分:2)
听起来您正在尝试及时存储积分,无论日历系统或时区如何。这些在Noda Time中由Instant
值表示。因此,在大多数代码中,您可能应该使用它来表示时间戳。 (这也是IClock.Now
会给你的。)
但是,你的数据库不太可能知道Noda Time ...我建议你应该存储一个DateTimeOffset
,你可以通过Instant.ToDateTimeOffset
获得{和{' s { {1}}也是。这将始终具有0的偏移量,但至少它对于它所代表的时间点并不含糊。