C# 本地化日期范围
有人知道如何使用C#本地化日期范围吗 特别是,我希望生成“智能”日期范围,以便消除冗余信息 这里有一些美国英语的例子C# 本地化日期范围,c#,.net,datetime,date,globalization,C#,.net,Datetime,Date,Globalization,有人知道如何使用C#本地化日期范围吗 特别是,我希望生成“智能”日期范围,以便消除冗余信息 这里有一些美国英语的例子 2009年8月至9月 2009年8月 2009年8月1日至9日 2009年1月1日至3月3日 2009年12月6日至2010年1月8日 据我所知,.NET Framework支持本地化日期,但不支持日期范围 使用System.Globalization.DateTimeFormatInfo中有关CultureInfo支持的Windows区域设置的信息,我能够(大部分时间)了解如何
System.Globalization.DateTimeFormatInfo
中有关CultureInfo
支持的Windows区域设置的信息,我能够(大部分时间)了解如何执行第1项和第2项。第2项只是DateTime.ToString(DateTimeFormatInfo.YearMonthFormat)
。使用YearMonthFormat
我还能够推断出大多数语言的#1使用的格式。对于少数我做不到的人,我只是复制了这一年
不幸的是,我不知道如何使用.NET框架完成项目3到5。Outlook格式范围使用这些格式,所以我希望可能有一些Win32 API可以做到这一点,但谷歌搜索“Win32日期范围本地化”并没有产生任何有用的结果
我喜欢“智能范围格式化”提供的增强的可用性,我也希望不使用英文版Windows的客户也能获得同样的好处
有人知道如何以依赖于文化的方式做到这一点吗?这是一个好问题,而且.NET framework和其他语言似乎也缺少这一点。我想结果的呈现取决于你的申请 Outlook对输入日期有很好的理解(谷歌日历也是如此),但我个人还没有将这种形式的表达视为输出(例如,显示给用户) 一些建议:
August - September, 2009
August 1 - 31, 2009
August 1 - 9, 2009
January 1 - March 3, 2009
December 6, 2009 - January 8, 2010
如果我正确理解了您的代码,下面的代码将处理4和5
public string GetDateRangeString(DateTime dt1, DateTime dt2)
{
DateTimeFormatInfo info = new DateTimeFormatInfo();
string format1;
string format2;
format2 = info.YearMonthPattern;
format1 = dt1.Year == dt2.Year ? format1 = info.MonthDayPattern :
format2;
return string.Format("{0} - {1}", dt1.ToString(format1), dt2.ToString(format2));
}
我最终为此定义了自己的范围格式 大部分情况下,我都是从LongDatePattern派生出来的。如果可能的话,我会根据谷歌日历和/或母语人士验证这些格式 我还为时间范围(同一天内)生成了两种格式,一种用于同一12小时内,另一种用于同一12小时外的时间(对于使用24小时时间的区域性,这两种格式是相同的)。这些格式主要基于FullDateTimePattern 在所有情况下,我尽可能地从所有格式中删除“日期名称”(星期一、星期二等) 我很想在这里发布它们,但似乎堆栈溢出的人对html表有一种不合理的恐惧,因为他们不允许使用表标记。数据本质上是一个巨大的表。我对尝试使用CSS模拟表不感兴趣,所以我只是将表放在我自己的网站上。如果您感兴趣,可以在这里访问它: 如果您真的感兴趣的话,我确实有一些关于我是如何导出很多格式的详细说明,包括哪些已验证,哪些尚未验证。如果您想要这些说明,请发送电子邮件至: contact@transactor.com
我很乐意将它们发送给您。有意思的问题!我想您的意思是第5项说“…-2010年1月8日”,是吗?是的,我做了。很好。我编辑了这篇文章。谢谢。我最初是用自己的英语写的。代码很简单。问题是同一个日期字符串在不同的国家可能意味着不同的东西(2009年1月2日在瑞典的意思与在美国不同)。因此,我需要以本地日期格式显示日期,即使UI文本没有翻译。除了英语,我可能还可以用西班牙语显示日期,但仅此而已。我不懂日语、汉语、俄语、法语、各种印度语或Windows支持的任何其他语言。国际化并不是你想要的我妻子会说几种语言,但可以正式翻译成任何一种语言(只能译成英语)因为翻译需要得到母语为英语的人/思想家的批准。我自己做了一个简短的试验,但最初得到的英语结果与你不同……但我来自英国,在我看来,错误的日期格式……应该是“8月4日”而不是“8月4日”,想想“7月4日”、“7月4日”听起来是错误的和突然的!想想你的示例日期2009年1月2日-假设你使用DateTime应该不会有问题,只要你在解析日期字符串时知道本地,你就应该能够访问该date.Month和该date.Day而不必担心它
public string GetDateRangeString(DateTime dt1, DateTime dt2)
{
DateTimeFormatInfo info = new DateTimeFormatInfo();
string format1;
string format2;
format2 = info.YearMonthPattern;
format1 = dt1.Year == dt2.Year ? format1 = info.MonthDayPattern :
format2;
return string.Format("{0} - {1}", dt1.ToString(format1), dt2.ToString(format2));
}