Ajax控件工具包时区问题

时间:2012-10-17 09:23:18

标签: c# asp.net

我在Web应用程序中使用Ajax Control Kit。问题是当我使用印度时区访问应用程序然后它工作正常但是当我选择中央时间(美国和加拿大)的时区时,日历将显示日期显示为选定日期-1。例如,如果我选择16.Oct.2012,它将显示(在extendar控制中)为15.Oct.2012。我尝试了以下代码,但没有帮助:

protected void Page_Load(object sender, EventArgs e) {
    string Lang = "en-US"; //set your culture here
    System.Threading.Thread.CurrentThread.CurrentCulture =
        new System.Globalization.CultureInfo(Lang);
}

EnableScriptGlobalization = "true";

同样在调试期间,我发现Javascript函数本身的发件人存储了错误的值,即日期=选择日期-1

function setDateIntoHiddenField(sender, args)

有任何想法或建议吗?

3 个答案:

答案 0 :(得分:2)

你为什么要尝试罗马尼亚文化? 尝试美国文化,如:

string Lang = "en-US"; //set your culture here
System.Threading.Thread.CurrentThread.CurrentCulture =
new System.Globalization.CultureInfo(Lang);

中部时间是UTC -5

罗马尼亚时间是UTC + 2

像这样设置datepicker值:

DateTime.UtcNow

您可以在此处找到有关使用时区的更深入的说明: How to elegantly deal with timezones

答案 1 :(得分:1)

您已经得到了一个很好的建议,您应该使用UTC日期值而不是本地值。

当您设置SelectedDate值时,它将Calendar extender控件视为UTC日期,因此如果您设置16.Oct.2012所选日期值,则表示您已设置Tue, 16 Oct 2012 00:00:00 GMT并且此值已转换为local Central时间,它仍然是10月15日在中部时区。严格地说它是10/15/2012 7:00:00 PM

顺便说一句,您可以尝试设置16.Oct.2012 23:00所选日期值并检查印度地区的显示日期。我保证你会感到惊讶。

答案 2 :(得分:1)

您可以尝试使用以下代码在客户端

上显示UTC日期
 var localDate = sender.get_selectedDate(); 
    var dateTime = new Date(localDate.getUTCFullYear(), localDate.getUTCMonth(), localDate.getUTCDate()).format("MMM dd, yyyy");

然后使用dateTime设置文本框中的文字。