Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
144 views
in Technique[技术] by (71.8m points)

c# - System.DateTime is not getting updated in Server but working fine in Local

I have written some code to set Application time based on a country dropdown based on a location. It works fine in local but not working in Server once deployed please help...

 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();;
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

All your code needs to do is this:

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

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

Of course, you are making a serious mistake in thinking that all of Australia is on a single time zone. See this Wikipedia article for details.

What's likely the reason that your code didn't work when you sent it to production is that you were relying on DateTime.Now to be India. There's a good chance that your server is in another time zone. For example, it's a best practice to put servers in UTC.

Besides, it's a bit silly to think that your users will only be in one of two different time zones. You should probably just create a list via TimeZoneInfo.GetSystemTimeZones(), using the .Id and .DisplayName of each item.

You might also want to make sure that your servers have the latest Windows Updates, or you have applied the Time Zone Updates manually.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...