c# – .NET中的自定义文化感知日期格式

c# – .NET中的自定义文化感知日期格式,第1张

概述在.NET中,用于格式化DateTime值的大多数标准字符串都是文化感知的,例如ShortDatePattern(“d”)格式字符串根据当前文化切换年/月/日部分的顺序: 6/15/2009 1:45:30 PM -> 6/15/2009 (en-US)6/15/2009 1:45:30 PM -> 15/06/2009 (fr-FR)6/15/2009 1:45:30 PM -> 15.06 在.NET中,用于格式化DateTime值的大多数标准字符串都是文化感知的,例如ShortDatePattern(“d”)格式字符串根据当前文化切换年/月/日部分的顺序:
6/15/2009 1:45:30 PM -> 6/15/2009 (en-US)6/15/2009 1:45:30 PM -> 15/06/2009 (fr-FR)6/15/2009 1:45:30 PM -> 15.06.2009 (de-DE)

对于仅包含月和日的日期格式,我需要类似的东西:

6/15/2009 1:45:30 PM -> 6/15 (en-US)6/15/2009 1:45:30 PM -> 15/06 (fr-FR)6/15/2009 1:45:30 PM -> 15.06. (de-DE)

使用例如“MM / dd”自定义格式字符串不起作用;当我希望它显示“11.01”时,它将在1月11日在德国文化中错误地显示“01.11”.

如何构建一个自定义格式字符串,将日期部分的顺序考虑在内?

解决方法 假设传递的所有文化都有一个ShortDatePattern包含M或MM,d或dd按某种顺序使用某种分隔符(我不能想到格里高利历的异常,但我可能错了)那么以下内容将起作用:
private static string FindMonthDayOnly(System.Globalization.CultureInfo ci){  string shortPattern = ci.DateTimeFormat.ShortDatePattern;  while(shortPattern[0] != 'd' && shortPattern[0] != 'M')  {    shortPattern = shortPattern.Substring(1);    if(shortPattern.Length == 0)      return ci.DateTimeFormat.ShortDatePattern;  }  while(shortPattern[shortPattern.Length - 1] != 'd' && shortPattern[shortPattern.Length - 1] != 'M')  {    shortPattern = shortPattern.Substring(0,shortPattern.Length - 1);    if(shortPattern.Length == 0)      return ci.DateTimeFormat.ShortDatePattern;  }  return shortPattern;}

如果假设非常不匹配,那么它将恢复为ShortDatePattern,尽管它也可能最终仅显示日期或仅显示月份.

它在最后没有正确包括分隔符或适当时的其他指标时失败.例如,它将标准格式(yyyy-MM-dd)转换为MM-dd而不是-MM-dd,这是没有年份的月 – 日组合的标准格式.

总结

以上是内存溢出为你收集整理的c# – .NET中的自定义文化感知日期格式全部内容,希望文章能够帮你解决c# – .NET中的自定义文化感知日期格式所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1246024.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存