如何在日历控件上突出显示今天的日期?

时间:2013-09-28 04:18:41

标签: c# asp.net calendar

我想强调今天的日历控制日期,我写的是这样的

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

1 个答案:

答案 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;