[英]How to get the client timezone id for c# timezoneinfo class from client side using javascript
我想從 JavaScript 獲取客戶端時區 id 來解析 c# TimezoneInfo 類。並轉換為 utc 時間。我有這個
var timezone = String(new Date());
return timezone.substring(timezone.lastIndexOf('(') + 1).replace(')', '').trim();
問題是它會在一段時間內返回 javascript 時區 CST。 是否有正確的方法來獲取時區 ID
和來自 c#
TimeZoneInfo ZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZoneIdFromJavascript);
return TimeZoneInfo.ConvertTimeToUtc(Datetime, ZoneInfo);'
TimeZoneInfo
使用Windows時區標識符。 它們不會匹配來自 JavaScript 的任何東西。 請閱讀時區標簽維基。TimeZoneInfo
做得更好。我發現的最安全的方法是僅使用 UTC 的偏移量而不是標識符名稱。
從 Javascript 我發送這個:
var dateString = new Date();
var offset = dateString.getTimezoneOffset();
在 C# 上,我將此偏移量映射到具有相同偏移量的第一個時區:
string jsNumberOfMinutesOffset = ViewModel.offset; // sending the above offset
var timeZones = TimeZoneInfo.GetSystemTimeZones();
var numberOfMinutes = Int32.Parse(jsNumberOfMinutesOffset)*(-1);
var timeSpan = TimeSpan.FromMinutes(numberOfMinutes);
var userTimeZone = timeZones.Where(tz => tz.BaseUtcOffset == timeSpan).FirstOrDefault();
這為我們提供了從客戶端接收到的具有相同偏移量的第一個時區。 由於有多個時區具有相同的偏移量,因此它並不總是與用戶的確切時區匹配,但從 UTC 轉換為本地時間表示是完全可靠的。
我希望它可以幫助某人:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.