C#日期格式化方法中IFormatProvider怎么用?

C#日期格式化DateTime.ToString(String, IFormatProvider)方法中IFormatProvider要怎么用,什么时候用?
能不能多举几个典型例子。

阅读 21k
2 个回答

IFormatProvider 是一个通用的格式化提供器,一般都是用的现成实现,而现成实现基本上都已经被 .NET 封装起来了。

自己格式化日期数据的时候,用 DateTime.Format(string) 这个就好。

参数是日期格式化格式,有标准的和自定义的两种:

自定义的和 Java 很像,最常用的就是 "yyyy-MM-dd HH:mm:ss"

按指定地区的格式

// System.Globalization.CultureInfo

CultureInfo cn = CultureInfo.GetCultureInfo("zh-CN");
var cnString = DateTime.Now.ToString("D", cn.DateTimeFormat);
Console.WriteLine(cnString);
// 2015年9月7日

CultureInfo us = CultureInfo.GetCultureInfo("en-US");
var usString = DateTime.Now.ToString("D", us.DateTimeFormat);
Console.WriteLine(usString);
// Monday, September 7, 2015

特别注意:CultureInfo 只提供不同地区的格式,但时间都是按本地时间来算的。如果要其它地方的时间,需要用 TimeZoneInfo 来处理,也就是你在其它帖中问过的问题。

我给你贴个链接,自己去看看DateTime.ToString 方法 (String, IFormatProvider)

如果你要同时使用两个参数的话string有不同的参数类型,IFormatProvider常用的你可以设置不同国家时间的格式

string 类型
格式字符 关联属性/说明
d ShortDatePattern
D LongDatePattern
f 长日期和短时间
F 长日期和长时间
g 短日期和短时间
G 短日期和长时间
m,M MonthDayPattern
r,R RFC1123Pattern
s 使用当地时间的 SortableDateTimePattern(基于 ISO 8601)
t ShortTimePattern
T LongTimePattern
u UniversalSortableDateTimePattern 用于显示通用时间的格式
U 使用通用时间的完整日期和时间(长日期和长时间)
y、Y YearMonthPattern

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进