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您是否拥有服务器的控制权?您需要联系该服务器的管理员,让他们通过控制面板->日期和时间确认服务器的日期是否错误。