2015-09-21 89 views
1

我希望能夠將使用NodaTime的C#中的當前本地時間與白天的固定當地時間進行比較。我不需要擔心時區或夏令時,我只需要與本地系統時間進行比較。到目前爲止,我有這樣的代碼......使用NodaTime如何比較當地時間和固定時間?

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

你得到了什麼錯誤? –

+0

@Nikita我的錯誤是無關的,只是一個C#noob問題,現在已經糾正。 :) – Crispy

回答

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時間2.0,這是由略爲簡單使用ZonedClock

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

對於「早於11點」,你總是可以使用,當然if (time.Hour < 11),但使用一個LocalTime是更一般的。

+0

感謝Jon,作品很好,我不得不使用Windows時區數據庫變體來使它工作,使'DateTimeProviders'可用的交易是什麼? – Crispy

+0

@Crispy:你什麼意思?當你使用DateTimeZoneProviders.Tzdb時出了什麼問題? –

+0

我得到錯誤'名稱'DateTimeProviders'在當前上下文中不存在'。可能我的C#經驗不足...... – Crispy