C# 如何突出今天';日历控件上的日期?

C# 如何突出今天';日历控件上的日期?,c#,asp.net,calendar,C#,Asp.net,Calendar,我想在日历控件上突出显示今天的日期,我是这样写的 <asp:Calendar ID="EndDate" runat="server" OnSelectionChanged="EndDate_OnSelectionChanged" BorderColor="#3366CC" Height="186px" Width="220px" BackColor="White" BorderWidth="1px"

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

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

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

<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;
在web应用程序中使用
DateTime.Now
是不合适的。它将返回服务器的本地时间,正如您所注意到的,它不一定是应用程序用户的本地时间

<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>
我以前在博客上写过这件事。主要的一点是,您的代码不应该依赖于服务器的时区设置。部署应用程序或将其移动到新主机不应使数据或功能失效

<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>
您没有给出确切的时区,但举个例子,假设您的服务器设置为美国太平洋时间,但您位于印度。当你的时间是10月6日上午10:00时,加利福尼亚州的时间是10月5日晚上9:30。因为您只是在日历上选择了一个日期,所以您不会注意到时间部分,而且它似乎是一整天的休息

<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>
您需要考虑一下这个应用程序的用户是谁。你将如何确定他们的时区?有许多不同的技术。最简单的就是问问他们。您可以提供时区的下拉列表,并使用该列表确定其当前日期

<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>
要生成下拉列表,请使用
TimeZoneInfo.GetSystemTimeZones
。这将为您提供
TimeZoneInfo
对象的列表。显示一个下拉列表,其中文本为
.DisplayName
值,值为
.Id

<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>
然后,当需要设置日历日期时,可以执行以下操作:

<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>
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(theTimeZoneId);
DateTime today = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tzi).Date;
EndDate.TodaysDate = today;

服务器的日期是昨天还是在不同的时区,当您运行代码时,它实际上是昨天?我不知道服务器的日期设置如何。我刚才已经运行过了。但仍然突出显示日期为“27”@Karl Anderson您是否拥有服务器的控制权?您需要联系该服务器的管理员,让他们通过控制面板->日期和时间确认服务器的日期是否错误。