我正面臨時區問題。現在我從客戶端保存時區並以UTC存儲所有DateTime。它工作正常,但是當我試圖將CST,EST,EDT等時區後面的UTC轉換爲UTC時,它會顯示錯誤的數據。Asp.Net中的TimeZone問題MVC
問題 - 讓我們假設,如果我做任何任務,在晚上10點EDT,它會爲凌晨2點(根據UTC)被保存在數據庫,但是當我試圖一天獲取數據並傳遞當前UTC日期。
我的問題是如果我試圖從像午夜11點(從EST)到當前時間的數據獲取數據,但由於UTC而導致UTC到EST的轉換錯誤12 PMnight是昨天晚上8點(如EDT後4小時來自UTC)。 (從日期[UTC轉換爲EDT] - 06/07/2017 08:00 pm)和截止日期 - 2017年6月7日11:00 pm)由於此轉換,我只能從晚上8點到晚上11點獲取數據< - 我期待從日期06/07/2017 04:00 AM按照UTC。
代碼 - 以下是轉換代碼。
function setTimezoneCookie() {
try {
var timezone_cookie = "timezoneoffset";
var timeZoneName = "timezonename"
var tz = jstz.determine();
var aa = tz.name();
// if the timezone cookie not exists create one.
if (!$.cookie(timezone_cookie)) {
// create a new cookie
$.cookie(timezone_cookie, new Date().getTimezoneOffset());
$.cookie(timeZoneName, aa);
}
else {
var storedOffset = parseInt($.cookie(timezone_cookie));
var currentOffset = new Date().getTimezoneOffset();
if (storedOffset !== currentOffset) {
$.cookie(timezone_cookie, new Date().getTimezoneOffset());
$.cookie(timeZoneName, aa);
location.reload();
}
else {
$.cookie(timeZoneName, aa);
}
}
}
C#代碼 - - 從日期我只和一個日期
Javascript代碼採取utcnow.date
fromDate =Convert.ToDateTime(fromDate).ToClientTimeZoneinDateTime().ToString();
toDate = Convert.ToDateTime(toDate).ToClientTimeZoneinDateTime().ToString();
ObjectParameter totalRecords = new ObjectParameter("TotalRecords", typeof(int));
var DetailsList = objDetailsList.GetDetails(loginUserId,locationId, userId, taskType, pageIndex, numberOfRows, sortColumnName, sortOrderBy, textSearch, totalRecords, fromDate, toDate);
if (DetailsList.Count() > 0)
{
string output = BuildJQGridResults(DetailsList, numberOfRows, pageIndex, Convert.ToInt32(totalRecords.Value));
response.Write(output);
}
else
{
JQGridResults result = new JQGridResults();
List<JQGridRow> rows = new List<JQGridRow>();
result.rows = rows.ToArray();
result.page = 0;
result.total = 0;
result.records = 0;
response.Write(new JavaScriptSerializer().Serialize(result));
}
下面是轉換UTC時間的方法到客戶端時區
public static DateTime ToClientTimeZoneinDateTime(this DateTime dt)
{
try {
if (System.Web.HttpContext.Current.Request.Cookies["timezoneoffset"] != null || System.Web.HttpContext.Current.Request.Cookies["timezonename"] != null)
{
var timezonename = System.Web.HttpContext.Current.Request.Cookies["timezonename"].Value;
timezonename = timezonename.Replace("%2F", "/");
var timezoneLocal1 = FindTimezoneName(timezonename);
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(timezoneLocal1);
bool isCurrentlyDaylightSavings = tzi.IsDaylightSavingTime(dt);
if (isCurrentlyDaylightSavings == true)
dt.AddHours(1);
var timeOffSet = System.Web.HttpContext.Current.Request.Cookies["timezoneoffset"].Value;
var offset = int.Parse(timeOffSet.ToString());
dt = dt.AddMinutes(-1 * offset);
return dt;
}
return dt.ToLocalTime();
}
catch (Exception)
{
return DateTime.UtcNow;
}
}
毫無疑問,當時區正確處理,但如果最終用戶試圖在美國東部時間晚上8點之後嘗試獲取數據,則會面臨UTC時區之後的問題。我也附上了截圖。
以上的IMG轉換後?
你能提供一個[mcve]你的代碼和'DateTime'的轉換嗎? – gravity
http://blog.nodatime.org/2011/08/what-wrong-with-datetime-anyway.html – adPartage
這聽起來像你的查詢使用錯誤的日期。請記住,查詢中的日期也應使用UTC。發佈一些示例代碼以獲得更好的答案 –