我需要在使用时间表的应用程序中以 24 小时格式对天数执行一些计算。例如,17h + 12h = 5h。我试图创建自己的Time
结构并环绕TimeSpan
or DateTime
。它工作正常,但我遇到了要在ToString
.
事实上,我当然希望我的结构能够在任何文化下工作。起初,我正在考虑将格式委托给一个DateTime
结构并跳过所有与时间无关的自定义格式。我不能将此任务委托给 a TimeSpan
,因为它不处理某些文化中使用的 AM/PM。例如,在我的Time
结构中,我写道:
public string Format(string format, IFormatProvider provider)
{
return TimeFormat.Format(this, format, DateTimeFormatInfo.GetInstance(provider), provider);
}
// ...
internal class TimeFormat
{
internal string Format(Time time, string format, DateTimeFormatInfo dtfi, IFormatProvider provider)
{
DateTime dt = new DateTime(DateTime.MinValue, 1, 1, time.Hours, time.Minutes, time.Seconds, time.Milliseconds);
/* Here I am checking what the 'format' string is made of
and filter-out anything that is not strictly-time related. */
return dt.Format(format, provider);
}
}
我查看了ToString
该结构的方法是如何在DateTime
mscorlib 中实现的。哇……要考虑的东西太多了。我想或多或少地重写其中的内容,但只保留与时间相关的内容,但所有内容都混在其中,不容易理解。而且我注意到一些绝对不简单的东西也可以处理,例如希伯来语格式等。这将花费我比我期望的更多的时间来重写所有这些!特别是我不想在没有清楚地了解我在做什么的情况下这样做。
所以总结一下:
- 如何创建“所有文化兼容”的时间格式?
- 上一层,我是否使用
DateTime
or的包装器正确处理了问题TimeSpan
?我不能直接使用 aTimeSpan
:它适用于负时间(我使用模数将时间严格控制在 0 到 23:59:59.999 之间),它在某些文化中不处理 AM/PM,它使用Day
s。对我来说,“一天中的时间”不同于“时间跨度”。 - 我不需要处理时区或 DST,也不需要闰秒,因为我处于与日历无关的上下文中,但我希望能够处理一天中时间的本地化格式。(例如,使用 'H'(或任何希伯来语、中文、泰米尔语或俄语字符)代替 ':' 或 AM/PM 代替 24 小时格式)。
任何指向我一些库或教程的提示或帮助都会有所帮助!