1

私はオンラインの書籍販売 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 時間になることもあります)。私を修正してください。

4

1 に答える 1