私はオンラインの書籍販売 Web サイトを持っています。管理者と物理的な書店はインドにありますが、サーバーは米国のサーバーでホストされています。管理者は、成功した注文のレポートを作成し、1 日 2 回午前 11 時と午後 4 時にメールで送信するよう要求しました。
午前 11 時に、午後 4 時 (前日) から午前 11 時 (同日) の間に行われた注文のリストを取得する必要があります。
午後 4 時に、午前 11 時 (同日) から午後 4 時 (同日) の間に出された注文リストを取得する必要があります。
それを実装するために、このマッピングのレコードを保持するテーブルを作成しました。たとえば、ページが 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時間は常に一定であるため、GMT時間を計算してからインド時間を計算し、サーバー時間からインド時間(差)を差し引くと想定しました。私はインドの時間をデータベースからコンポーネントにしてから、計算の差を再度追加して、同等のサーバー時間を取得します..私の論理は間違っています. 私は夏時間について読みましたが、私の国はそれに従っていないので、それが実際に何を意味するのか難しいと思います (1 日は 23 時間または 25 時間になることもあります)。私を修正してください。