我希望能够将使用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会感谢我出错的一些指示。
答案 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
更为通用。