Я не знаю, является ли это оптимальным, но это работает
(df['Date Time'].dt.strftime('%Y-%m-%d') == '2019-01-02').idxmax()
Рассмотрение общедоступных участников, подвергнутых Календарем ASP.NET, управляет, я не полагаю, что эта информация - что-то, что можно просто получить от календарного управления.
У Вас есть несколько опций как "обходные решения" к этому, хотя, хотя не хороший...., но они работали бы.
Предоставленный ни один не изящен, но AFAIK, это - единственная реальная опция
Править
После обсуждения в комментариях другая опция является измененной версией моей второй опции выше. В основном в первый раз Дневной Рендеринг называют, получите блок данных в течение следующих 42 дней, затем можно просто искать список надлежащее дневное значение для отображения на будущих вызовах к DayRender, избегая хита DB в течение каждого дня. Выполнение этого является другим "неизящным" решением, но оно работает, и уменьшает немного нагрузки на DB, но представляет немного служебные на стороне приложения.
Будет важно здесь определить хорошо структурированные свойства уровня страницы для содержания объектов во время событий привязки, но гарантировать это если измененный месяц, и т.д. что это не было загружено неправильно и т.д.
Mitchel, Работавший отлично, спасибо. Запущенный с общедоступной переменной bool m_FirstDay = ложь
в функции day_render
if(m_FirstDay == false)
{
DateTime firstDate;
DateTime lastDate;
firstDate = e.Day.Date;
lastDate = firstDate.AddDays(41);
m_FirstDay = true;
}
У меня затем был видимый диапазон дат календарного управления asp.net. Еще раз спасибо.
Я написал несколько методов, которые помогут с этим. Просто передайте Calendar.VisibleDate:
public static DateTime GetFirstDateOfMonth(DateTime date)
{
return new DateTime(date.Year, date.Month, 1);
}
public static DateTime GetFirstDisplayedDate(DateTime date)
{
date = GetFirstDateOfMonth(date);
return date.DayOfWeek == DayOfWeek.Sunday ? date.AddDays(-7) : date.AddDays((int)date.DayOfWeek * -1);
}
public static List<DateTime> GetDisplayedDates(DateTime date)
{
date = GetFirstDisplayedDate(date);
List<DateTime> dates = new List<DateTime>();
for (int i = 0; i < 42; i++)
{
dates.Add(date.AddDays(i));
}
return dates;
}
I've just been looking into this myself, and got directed to here. I'm personally tempted to go with option two, because the alternative is messy. Ronnie's version is nice, but unfortunately doesn't take into account cultures with different FirstDayOfWeeks.
Using Reflector, we can see how it's done internally:
...
DateTime visibleDate = this.EffectiveVisibleDate();
DateTime firstDay = this.FirstCalendarDay(visibleDate);
...
private System.Globalization.Calendar threadCalendar =
DateTimeFormatInfo.CurrentInfo.Calendar;
private DateTime EffectiveVisibleDate()
{
DateTime visibleDate = this.VisibleDate;
if (visibleDate.Equals(DateTime.MinValue))
{
visibleDate = this.TodaysDate;
}
if (this.IsMinSupportedYearMonth(visibleDate))
{
return this.minSupportedDate;
}
return this.threadCalendar.AddDays(visibleDate,
-(this.threadCalendar.GetDayOfMonth(visibleDate) - 1));
}
private DateTime FirstCalendarDay(DateTime visibleDate)
{
DateTime date = visibleDate;
if (this.IsMinSupportedYearMonth(date))
{
return date;
}
int num = ((int)
this.threadCalendar.GetDayOfWeek(date)) - this.NumericFirstDayOfWeek();
if (num <= 0)
{
num += 7;
}
return this.threadCalendar.AddDays(date, -num);
}
private int NumericFirstDayOfWeek()
{
if (this.FirstDayOfWeek != FirstDayOfWeek.Default)
{
return (int) this.FirstDayOfWeek;
}
return (int) DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek;
}
private bool IsMinSupportedYearMonth(DateTime date)
{
return this.IsTheSameYearMonth(this.minSupportedDate, date);
}
private bool IsTheSameYearMonth(DateTime date1, DateTime date2)
{
return (((this.threadCalendar.GetEra(date1) ==
this.threadCalendar.GetEra(date2)) &&
(this.threadCalendar.GetYear(date1) ==
this.threadCalendar.GetYear(date2))) &&
(this.threadCalendar.GetMonth(date1) ==
this.threadCalendar.GetMonth(date2)));
}
Sadly, the functionality is already there, we just can't get at it!