我有一個在線圖書銷售網站,管理和實體書店位於印度,但服務器託管在美國服務器上。 管理員要求創建成功訂單的報告,並在上午11:00和下午4:00每天兩次向他發送郵件。我如何計算從給定時間不同的時區
上午11時,他應該得到放在下午4:00(前一天)和11之間的命令列表:上午(當天)
下午4時,他應該得到安置11之間的順序列表:00(當天)下午4:00(當日)
爲了實現它,我創建了適用於該映射記錄一樣,如果頁面被稱爲在n次則應之間生成報告表x和z時間。
在頁面加載我正在採取當前時間,並得到的時間。 正在使用的代碼如下
DateTime dt = DateTime.Now;//getting server time
DateTime gmttime = DateTime.Now.ToUniversalTime();//getting gmt time
DateTime indiantime = gmttime.AddHours(5).AddMinutes(30);//get india time(is always constant dont follows daylight saving)
TimeSpan diff = dt-indiantime; // calculating the difference
string runH = indiantime.ToString("%h"); // geting the hour component of india time
string runTT = indiantime.ToString("tt"); //getting ap/pm component of india time
string indiantimeformat = "dd/MM/yyyy h:m tt";
CultureInfo c = System.Globalization.CultureInfo.InvariantCulture;
string q = "SELECT frmH,frmTT,infrmprevious,toH,toTT,intoprevious FROM successfullordermailtiming WHERE runH = '"+runH+"' AND runTT = '"+runTT+"'"; //quering the database for getting from and when
DataTable ddt = dtu.Table(q);
if (ddt.Rows.Count>0)
{
object[] ob = ddt.Rows[0].ItemArray;
string frmH= ob[0].ToString();
string frmTT=ob[1].ToString();
string infrmprevious=ob[2].ToString();
string toH =ob[3].ToString();
string toTT =ob[4].ToString();
string intoprevious = ob[5].ToString();
DateTime indianfrom = indiantime;
if (infrmprevious == "1")
{
indianfrom = indiantime.AddDays(-1); // if previous the substract 1 day
}
DateTime indianto = indiantime;
if (intoprevious == "1")
{
indianto = indianto.AddDays(-1);
}
//make indian frm
string indianfrm = indianfrom.ToString("dd/MM/yyyy") + " " + frmH + ":0 " + frmTT; //making from india time
string indiantoo = indianto.ToString("dd/MM/yyyy") + " " + toH + ":0 " + toTT; //making to india time
indianfrom = DateTime.ParseExact(indianfrm, indiantimeformat, System.Globalization.CultureInfo.InvariantCulture);
indianto = DateTime.ParseExact(indiantoo, indiantimeformat, System.Globalization.CultureInfo.InvariantCulture);
DateTime serverfrm = indianfrom + diff; //calculating frm servertime
DateTime serverto = indianto + diff; //calculating to server time
此代碼被正確工作到上圍繞4月12日調整有夏令時(丹佛(MDT))服務器位置。
請告訴我我錯了什麼?自格林威治標準時間以來我就假定時間總是不變,我計算gmt時間,然後印度時間,然後從服務器時間減去印度時間(差異)。我使印度時間frm和數據庫中的組件,然後再次添加計算差異以獲得相應的服務器時間..是我的邏輯錯誤。我讀到了關於節省日光的問題,但是由於我的國家不遵循它,我發現它實際上意味着什麼很難(它說一天可以是23小時或25小時)。請糾正我。
查看相關問題http://stackoverflow.com/questions/4209337/c-sharp-timezone-calculation-problem – user1929959
提及的時間(*上午11點和下午4點*)是在哪個時區,你如何存儲你的數據庫中的值? – V4Vendetta
上午11點和下午4點在印度時間(+5:30)日期時間值僅存儲在服務器時間。 – Ratna