Я использую C# mvc4. Каждый объект с созданием члена даты Я сохраняю DateTime в моей БД как DateTime.UtcNow, у меня есть много просмотров, чтобы показать объекты и в моем html: @ item.Created многократно. Я хочу, чтобы по умолчанию ToString() был ToLocalTime, есть ли одно место, я могу объявить это? возможно переопределить значение по умолчанию ToString()set datetime to string to ToLocalTime
ответ
Нет, вы не можете переопределить .ToString()
на DateTime
.
DateTime
- это структура, а не класс. И это запечатано.
Метод расширения - хорошая идея, но он не будет вызван автоматически. Вы должны называть это, когда вам это нужно.
Вы сказали, что хотите просто поменять поведение DateTime.ToString()
по всему миру. Невозможно это сделать, и, вероятно, было бы опасно это сделать. В конце концов, вы используете значения UTC по какой-то причине. Если вам нужны локальные значения, используйте локальные значения.
Единственный способ, я могу даже думать, что вы можете достичь этого, с некоторым шагом после сборки, например, обычно выполняются в рамках AOP, таких как PostSharp. Вы можете написать аспект , который делает преобразование. Но опять же, я настоятельно рекомендую против этой идеи в целом.
Да, конечно, вы можете переопределить метод ToString().
См. http://msdn.microsoft.com/en-us/library/ms173154(v=vs.80).aspx для получения дополнительной информации.
Однако - я рекомендую использовать метод расширения, чтобы реализовать вашу потребность, потому что вы могли бы использовать расширение ToString() по умолчанию в другом месте.
/Обновление: Использование метода расширения, позволяющего datetime быть нулевым значением (что-то всегда идет не так). Вы можете вызвать это при каждом значении DateTime. Затем метод проверяет, имеет ли он значение null. В этом случае он возвращает string.empty, иначе Datetime в формате, который вам нравится.
public static string ToLocalString(this DateTime? date)
{
if(date == null)
{
return String.Empty;
}
else
{
return date.ToLocalString().ToString();
}
}
Я согласен с ответом Serv, что вы не должны переопределить по умолчанию .ToString() для DateTime и лучшего метода расширения использования. Просто хотел бы добавить, что у вас есть возможность использовать поглотитель собственности, как это:
private DateTime _created;
public DateTime Created
{
get {
return _created.ToLocalTime();
}
}
Но на мой взгляд - метод расширения будет лучшим вариантом.
- 1. DateTime to String error
- 2. set string to sqlbinary
- 3. convert dateTime string to dateTime
- 4. convert datetime string to datetime
- 5. String to datetime
- 6. DateTime Object to string
- 7. String to DateTime Error
- 8. .NET DateTime to String
- 9. String to datetime
- 10. DayLight Сохранение времени DateTime из JavaScriptSerializer.Serialize to ToLocalTime
- 11. Covert NTP string to DateTime
- 12. Set std: cin to string
- 13. Convert String to Datetime C#
- 14. SQL datetime to string format
- 15. Powershell convert string to datetime
- 16. String to DATETIME с TimeZone
- 17. VB Net String to DateTime
- 18. InvalidCastException DateTime to String C#
- 19. C# DateTime to String Issue
- 20. Julian date string to DateTime
- 21. python convert string to datetime
- 22. String to Datetime в php?
- 23. string to datetime conversion javascript
- 24. String to datetime return nothing
- 25. String to datetime: не признан действительным DateTime
- 26. DateTime ToLocalTime сбой
- 27. String to char to string
- 28. как конвертировать UTC dateTime to local datetime
- 29. Rails set default DateTime to now
- 30. PHP - Codeigniter set views datetime to locale
Я хочу, чтобы одно место объявляло переопределение, только одно место для всего проекта foreach DateTime-вызов ToString, я хочу, чтобы оно было ToLocalTime, а затем ToString –