在运行时更改String.Format参数的格式

时间:2014-01-24 19:16:28

标签: c# string-formatting

我以前的旧LINQ代码有这样的东西:

DateOfBirth = string.Format("{0:MM/dd/yyyy}", myTable.DateOfBirth),

但是现在我希望能够格式化用户如何从Windows更改其日期模式,因此我将其更改为这样并且它可以工作:

string regionShortDate = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;
string temp = "{0:" + regionShortDate + "}";
DateOfBirth = string.Format(temp, myTable.DateOfBirth),

所以请注意我必须使用字符串连接来构建我的字符串格式化程序?我认为应该采用更专业的方式来做到这一点。你有什么建议?

2 个答案:

答案 0 :(得分:1)

使用DateTime.ToShortDateString方法

DateOfBirth = myTable.DateOfBirth.ToShortDateString();
  

ToShortDateString方法返回的字符串是   文化敏感。它反映了当前定义的模式   culture的DateTimeFormatInfo对象。例如,对于en-US   文化,标准的短日期模式是" M / d / yyyy&#34 ;;为de-DE   文化,它是" dd.MM.yyyy&#34 ;;对于ja-JP文化,它是" yyyy / M / d"。   特定计算机上的特定格式字符串也可以是   定制,使其不同于标准的短日期格式   字符串。

并且

  

使用。格式化当前DateTime对象的值   由 DateTimeFormatInfo.ShortDatePattern 属性定义的模式   与当前的线程文化相关联。返回值是   与通过指定" d"返回的值相同标准   带有ToString(String)方法的DateTime格式字符串。

答案 1 :(得分:1)

您可以使用ToShortDateString,因为Habib建议。

这取决于CultureInfo.CurrentCulture,因为虽然CultureInfo包含的各种信息通常因语言和地点而异,但包含个人偏好。因此,当我CurrentCulture.Name返回en-IE时,DateTime.Now.ToShortDateString()会返回2014-01-24而非24/01/2014,因为使用从CultureInfo.GetCultureInfo("en-IE")返回的对象,因为我自己的装备被设置为使用en-IE语言和ISO 8601用于日期和时间。

因此,不要担心当前文化的名称和当前与其语言相关的UI文化;他们可以将UseUserOverride设置为true,并且实际上是根据用户的设置构建的。

除了Habib的建议外,如果你想使用当前的短日期字符串(或来自任何其他CultureInfo的字符串,你可以使用字符串"d"。这对你的情况没有任何好处。短日期字符串是所有使用的,但如果它将成为更大的短语的一部分,它会很有用:

string.Format("Today is {0:d}.", DateTime.Now)

(在我的系统上,Today is 2014-01-24.或许还有别的东西)。

还有其他useful single-string formatting strings for dates,可以类似地使用。

编辑:

由于您刚刚指出您使用的是DateTime?而不是DateTime,因此您有三种选择:

  1. 使用DateOfBirth = string.Format("{0:d}", myTable.DateOfBirth)。这会导致空案例的空字符串。
  2. 使用string.Format测试无效,例如DateOfBirth = myTable.DateOfBirth.HasValue ? string.Format("Born on {0:d}.", myTable.DateOfBirth.Value) : "Date of birth unknown";
  3. 使用ToShortDateString测试无效性; DateOfBirth = myTable.DateOfBirth.HasValue ? myTable.DateOfBirth.ToShortDateString() : "Date of birth unknown";