-1

我已经编写了一些代码来根据基于位置的国家下拉菜单设置应用程序时间。它在本地运行良好,但在部署后无法在服务器中运行,请帮助...

 Date Time AppTime = new DateTime();

  protected void Page_Load(object sender, EventArgs e)
  {  
   AppTime = new DateTime();
   //Time Zone Changes for other Countries            
   TimeZoneInfo tzi1 = TimeZoneInfo.FindSystemTimeZoneById("AUS Eastern Standard Time");
   DateTime IndTime = DateTime.Now;
   DateTime CurrentUTC = TimeZoneInfo.ConvertTimeToUtc(IndTime);
   DateTime OzzieTime = TimeZoneInfo.ConvertTimeFromUtc(CurrentUTC, tzi1);

  string SelectedCountry = ddlCountry.SelectedValue.ToString();
  string Australia = ConfigurationManager.AppSettings["AustraliaCountryID"];

  if (SelectedCountry == Australia)
  {       
    AppTime = OzzieTime;
  }
  else
  {       
    AppTime = IndTime;
  }

        TextBox1.Text = AppTime.ToString();
        TextBox2.Text = DateTime.UtcNow.ToString();
        TextBox3.Visible = OzzieTime.ToString();;
4

2 回答 2

0

您的所有代码需要做的是:

string tzid = SelectedCountry == Australia
              ? "AUS Eastern Standard Time"
              : "India Standard Time";

TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById(tzid);
DateTime appTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tz);

当然,您认为整个澳大利亚都在一个时区是一个严重的错误。有关详细信息,请参阅此 Wikipedia 文章

当您将代码发送到生产环境时,您的代码无法正常工作的原因可能是您依赖于DateTime.Now成为印度。您的服务器很有可能位于另一个时区。例如,最好将服务器设置为 UTC。

此外,认为您的用户只会处于两个不同时区之一的想法有点愚蠢。您可能应该TimeZoneInfo.GetSystemTimeZones()使用每个项目的.Idand创建一个列表。.DisplayName

您可能还需要确保您的服务器具有最新的 Windows 更新,或者您已手动应用时区更新。

于 2013-10-28T16:16:44.100 回答
-3

我有同样的问题,我建立了这个方法:

    private static DateTime getTodayNow(string timeZoneId="")
    {
        DateTime retVal = DateTime.Now;


        DateTime.TryParse(DateTime.Now.ToString("s"), out retVal);

        if (!string.IsNullOrEmpty(timeZoneId))
        {
            try
            {
                DateTime now = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second).ToUniversalTime();
                TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);//"Russian Standard Time");
                retVal = TimeZoneInfo.ConvertTimeFromUtc(now, easternZone);
            }
            catch (TimeZoneNotFoundExceptio‌​n ex)
            {
              //write to log!!
            }
        }
        return retVal;
    }
于 2013-10-28T13:06:14.897 回答