使用NodaTime如何将现在的当地时间与固定时间进行比较?

时间:2015-09-21 23:57:09

标签: c# .net time nodatime

我希望能够将使用NodaTime的C#中的当前本地时间与当天固定的本地时间进行比较。我不需要担心时区或夏令时,我只需要与本地系统时间进行比较。到目前为止,我有这个代码...

IClock clock = SystemClock.Instance;
Instant instant = clock.Now;
var timeZone = DateTimeZoneProviders.Tzdb["Europe/London"];
var zonedDateTime = instant.InZone(timeZone);
var timeNow = zonedDateTime.ToString("HH:mm", System.Globalization.CultureInfo.InvariantCulture);
int tst = timeNow.CompareTo(new LocalTime(11, 00));
if (tst < 0)
{
    eventLog1.WriteEntry("Time is before 11am.");
}

我收到错误,但由于我对C#相对较新,NodTime会感谢我出错的一些指示。

1 个答案:

答案 0 :(得分:2)

要获取本地系统时间,执行需要担心时区。您可以使用:

var clock = SystemClock.Instance; // Or inject it, preferrably
// Note that this *could* throw an exception. You could use
// DateTimeZoneProviders.Bcl.GetSystemDefault() to use the Windows
// time zone database.
var zone = DateTimeZoneProviders.Tzdb.GetSystemDefault();
var now = clock.Now.InZone(zone);

if (now.TimeOfDay < new LocalTime(11, 0))
{
    ...
}

在Noda Time 2.0中,使用ZonedClock

使这更简单
var zonedClock = SystemClock.Instance.InTzdbSystemDefaultZone();
if (zonedClock.GetCurrentTimeOfDay() < new LocalTime(11, 0))
{
    ...
}

对于“早于11点”,您当然可以使用if (time.Hour < 11),但使用LocalTime更为通用。