我使用基本的 UtcNow 进行了以下实现,然后将其转换回 UI。 这个场景的目的非常简单。 当我将新客户端插入数据库时,我将其转换为 UtcNow,因此我有该记录的时间戳。 当我将其显示给用户时,我将其转换为本地(例如:您自“dd/MM/yyyy”起就是成员(member))。
这是我的实现。我想知道如何通过 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。我应该使用什么数据类型?日期时间、日期时间偏移?那么在代码中呢? OffsetDateTime,ZonedDateTime 我对此感到非常困惑。我已阅读用户指南,但它显示了更复杂的场景,我无法在如此简单的场景中实现它。
提前致谢!
最佳答案
听起来您正在尝试存储时间点,无论日历系统或时区如何。这些由野田时间中的即时
值表示。因此,在您的大部分代码中,您可能应该使用它来表示时间戳。 (这也是 IClock.Now
将为您提供的。)
但是,您的数据库不太可能了解 Noda Time...我建议您应该存储一个 DateTimeOffset
,您可以通过 Instant.ToDateTimeOffset
获取它(还有 Instant.FromDateTimeOffset
)。它的偏移量始终为 0,但至少它代表的时间点是明确的。
关于datetime - 如何使用NodaTime保存时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26853855/