2013-05-29 32 views
1
var Result1 = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.Local) 

var Result2 = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id)); 

這兩個將Utc時間轉換爲本地時間,這兩種不同的方式在結果或性能方面是否有任何區別?TimeZoneInfo.ConvertTimeFromUtc c#

哪個好?

爲什麼微軟沒有在樣品here

+0

我沒有看到它們之間的任何區別。 –

+2

我覺得兩者都是一樣的。第二個選項用於獲取其他時區,而不是您計算機上設置的本地時區。如果您像在自己的帖子中那樣使用它,它會得到與其他選項相同的結果。 –

回答

0

直接使用TimeZoneInfo.Local(作爲結果1)我想可能是值得的我的評論延伸到一個答案。

我有一個應用程序,其中「本地」時區配置在數據庫中,它與服務器本身的時區無關。 (它運行在雲服務器上)。 因此,使用TimeZoneInfo.Local對我不好。

我想要做的是從DB讀取什麼時區應該使用, 然後將時間從UTC轉換到該時區。 因此我使用:

TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById(GetTimeZoneId())); 

GetTimeZoneId()從數據庫中讀取。

0

這是你將如何使用它們的問題。 TimeZoneInfo.FindSystemTimeZoneById()用於當您想要本地以外的其他時區時。如果您始終使用當地時區,請使用TimeZoneInfo.Local

在性能方面,我認爲沒有太大的區別。但是,您可以嘗試使用.NET Profiler或其他性能分析器對其進行分析,以瞭解它們之間的差異。

1

唯一的區別是第二個需要繞過獲取TimeZoneInfo對象,獲取它的id,並再次使用id查找同一個對象。

該示例中的代碼使用FindSystemTimeZoneById方法的原因是,它獲取已知ID的TimeZoneInfo對象,但它沒有從已有的TimeZoneInfo對象獲取該ID。