Оказывается, у меня была ошибка
Выйти Код:
public async Task<ActionResult> LogOut()
{
await HttpContext.SignOutAsync("Cookies");
await HttpContext.SignOutAsync("oidc");
return RedirectToAction("Index");
}
Изменено на:
public IActionResult Logout()
{
return new SignOutResult(new[] { "Cookies", "oidc" });
}
Хорошо, моя реакция немного запоздала, но вот решение для более нового Delphi.
Он использует неявные перегрузчики классов, так что записи этого типа могут использоваться, как если бы они были TDateTime переменные.
TDateRec = record
year,month,day,hour,minute,second,millisecond:word;
class operator implicit(aDateRec:TDateRec):TDateTime;
class operator implicit(aDateTime:TDateTime):TDateRec; // not needed
class operator implicit(aDateRec:TDateRec):String; // not needed
class operator implicit(aDateRec:String):TDateRec; // not needed
end;
Реализация:
uses DateUtils;
class operator TDateRec.Implicit(aDateRec:TDateRec):TDateTime;
begin
with aDateRec do // Yeah that's right you wankers. I like "with" :)
Result := encodeDateTime(Year,Month,Day,Hour,Minute,Second,Millisecond);
end;
class operator TDateRec.Implicit(aDateTime:TDateTime):TDateRec;
begin
with Result do
DecodeDateTime(aDateTime,Year,Month,Day,Hour,Minute,Second,Millisecond);
end;
class operator TDateRec.Implicit(aDateRec:TDateRec):String;
begin
Result := DateTimeToStr(aDateRec)
end;
class operator TDateRec.Implicit(aDateRec:String):TDateRec;
begin
Result := StrToDateTime(aDateRec)
end;
Теперь вы можете объявить свои даты следующим образом:
const
Date1:TDateRec=(Year:2009;month:05;day:11);
Date2:TDateRec=(Year:2009;month:05;day:11;hour:05);
Date3:TDateRec=(Year:2009;month:05;day:11;hour:05;minute:00);
Чтобы проверить, работает ли это, выполните следующее:
ShowMessage(Date1); // it can act like a string
ShowMessage(DateToStr(Date1)); // it can act like a date
Если вы действительно хотите заменить все свои переменные TdateTime этим, вам, вероятно, потребуется перегружают и некоторые другие операторы (сложение, вычитание, явное, ...).
Единственное? возможный путь, но вероятно не, что Вы ищете:
const
{$J+}
Expire: TDateTime = 0;
{$J-}
initialization
Expire := EncodeDate(2009, 3, 23);
Нет никакого способа сделать это, потому что интерпретация побережья даты сам по себе не детерминирована, она зависит от конвенции/локали, за которой Вы следуете.
'1/4/2009' не находится в январе ни для какого французского человека, например, и наличия компилятора, переводящего, поскольку 4-го января сделал бы это компилятором дурака ;-)
Если компилятор не реализует некоторых (хорошо зарегистрированный) "волшебная" биективная функция для соединения значения даты и представления дисплея... И так или иначе, половина планеты не хотела бы его.
Единственное не неоднозначный способ, которым я вижу теперь, состоит в том, чтобы обеспечить значение, даже если это похоже на боль...... мои 0,02$
Нет, Delphi не поддерживает это.
Ваша первая идея была бы запросом на литералы даты и времени, отличные от обычных литералов с плавающей точкой. Я нашел королевского адвоката 72000, который является об отображенииTDateTime
значения как даты в отладчике, но ничем о Вашем конкретном запросе. Это не похоже ничей никогда упомянуто это прежде, все же. Это - постоянная тема на группах новостей; я просто ничего не могу найти в королевском адвокате об этом.
Ваша вторая идея потребовала бы StrToDate
быть evaluable во время компиляции. Я не вижу записей в королевском адвокате об этом также, но если это имеет значение, C++ получает такую функцию функций, которые, как показывают, имеют необходимые качества. StrToDate
не отвечал бы тем требованиям, тем не менее, потому что это чувствительно к настройкам даты текущей локали.
Ответ Rob Kennedy показывает, что решение StrToDate по сути вне рассмотрения, поскольку Вы не хотите, чтобы Ваш код повредился, если это компилируется в Европе!
Я действительно соглашаюсь, что должен быть некоторый способ сделать EncodeDate, но нет.
Что касается меня компилятор должен просто скомпилировать и выполнить любой код, который он находит в постоянном присвоении, и сохраните результат в константу. Я оставил бы его до программиста, чтобы гарантировать, что код не чувствителен к, он - среда.
Одно решение состояло бы в том, чтобы создать список констант в течение многих лет, другого для смещений месяца и затем создать его на лету. Необходимо было бы заботиться о високосных годах сами путем добавления 1 к каждой получающейся константе. Только некоторые ниже для запущения Вас... :)
Const
Leap_Day = 1; // use for clarity for leap year dates beyond feb 29.
Year_2009 = 39812; // January 1, 2009
Year_2010 = Year_2009 + 365; // January 1, 2010
Year_2011 = Year_2010 + 365; // January 1, 2011
Year_2012 = Year_2011 + 365; // January 1, 2012 (is leap year)
Year_2013 = Year_2012 + Leap_Day + 365; // January 1, 2013
Const
Month_Jan = -1; // because adding the day will make the offset 0.
Month_Feb = Month_Jan + 31; // 31 days more for the first day of Feb.
Month_Mar = Month_Feb + 28; // 28 days more for the first day of Mar.
Month_Apr = Month_Mar + 30; // 30 days more for the first day of Apr.
Const
Expire_Jan1 : tDateTime = Year_2009 + Month_Jan + 1;
Expire : tDateTime = Year_2009 + Month_Mar + 23;
Если у Вас есть високосный год затем, необходимо добавить 1 к чему-либо вне февраля того года.
Const
Expire : tDateTime = Year_2008 + Month_Mar + 23 + Leap_Day;
Править
Добавленный еще несколько лет для ясности, и добавил константу Leap_Day.
Дата Delphi является # дней с 30 декабря 1899. Таким образом, Вы могли, вероятно, придумать тщательно продуманную математическую формулу для выражения даты как константы. Затем Вы могли отформатировать его очень странно, для подчеркивания человекочитаемых частей. Моя лучшая попытка ниже, но это очень неполно; с одной стороны, это предполагает, что все месяцы имеют 30 дней.
Мой пример главным образом для забавы все же. На практике это довольно смешно.
const
MyDate = ((
2009 //YEAR
- 1900) * 365.25) + ((
3 //MONTH
- 1) * 30) +
24 //DAY
;
i think the best solution available to you is to declare:
ArmisticeDay: TDateTime = 6888.0 + (11.0/24.0); //Nov 11, 1918 11 AM
and just accept it.
My attempt Nº1
Expire = EncodeDate(2009, 3, 23);
[Error] Constant expression expected
My attempt Nº2
Expire: TDateTime = EncodeDate(2009, 3, 23);
[Error] Constant expression expected
So even though they're constant, and deterministic (i.e. do not depend on any locale information), it still doesn't work.