1

我想在日历控制上突出显示今天的日期,我是这样写的

<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; 它在本地主机上正常工作。但是在远程运行时,会突出显示昨天的日期。会有什么问题?

4

1 回答 1

0

您说您正在使用以下代码设置值:

EndDate.TodaysDate = DateTime.Now;

DateTime.Now在 Web 应用程序中使用是不合适的。它将返回服务器的本地时间,正如您所注意到的,它不一定是应用程序用户的本地时间。

我以前在这里写过关于这个的博客。要点是您的代码不应依赖于服务器的时区设置。部署您的应用程序或将其移动到新主机不应使数据或功能无效。

您没有提供确切的时区,但例如,假设您的服务器设置为美国太平洋时间,但您位于印度。当您的时间是 10 月 6 日上午 10:00 时,加州是 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;
于 2013-10-07T01:30:54.350 回答