我想强调今天的日历控制日期,我写的是这样的
<asp:Calendar ID="EndDate" runat="server"
OnSelectionChanged="EndDate_OnSelectionChanged" BorderColor="#3366CC"
Height="186px" Width="220px" BackColor="White" BorderWidth="1px"
CellPadding="1" DayNameFormat="Shortest" Font-Names="Verdana"
Font-Size="8pt" ForeColor="#003399">
<SelectedDayStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
<SelectorStyle BackColor="#99CCCC" ForeColor="#336666" />
<WeekendDayStyle BackColor="#CCCCFF" />
<TodayDayStyle BackColor="#99CCCC" ForeColor="White" />
<OtherMonthDayStyle ForeColor="#999999" />
<NextPrevStyle Font-Size="8pt" ForeColor="#CCCCFF" />
<DayHeaderStyle BackColor="#99CCCC" ForeColor="#336666" Height="1px" />
<TitleStyle BackColor="#5D7B9D" ForeColor="White">
</TitleStyle>
</asp:Calendar>
并在页面加载EndDate.TodaysDate = DateTime.Now;它在本地主机上正常工作。但是当在远程运行时,显示昨天的日期突出显示。会出现什么问题?
答案 0 :(得分:0)
您说您使用此代码设置了值:
EndDate.TodaysDate = DateTime.Now;
在Web应用程序中使用DateTime.Now
是不合适的。它将返回服务器的本地时间,正如您所注意到的那样,不一定是您的应用程序用户的本地时间。
我之前曾在博客中发表过这篇文章here。重点是您的代码不应该依赖于服务器的时区设置。部署应用程序或将其移至新主机不应使数据或功能无效。
您没有给出确切的时区,但作为一个例子,假设您的服务器设置为美国太平洋时间,但您位于印度。当你的时间是10月6日上午10点,加利福尼亚时间是10月5日晚上9:30。由于您只是在日历上选择了一个日期,因此您没有注意到时间部分,而且似乎是整整一天。
您需要考虑一下这个应用程序的用户是谁。你如何确定他们的时区?有许多不同的技术。最简单的就是问他们。您可以提供时区下拉列表,并使用它来确定当前时间。
要生成下拉列表,请使用TimeZoneInfo.GetSystemTimeZones
。这将为您提供TimeZoneInfo
个对象的列表。显示文本为.DisplayName
值的下拉列表,其值为.Id
。
然后,当您需要设置日历的日期时,您可以执行以下操作:
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(theTimeZoneId);
DateTime today = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tzi).Date;
EndDate.TodaysDate = today;