我以前的旧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),
所以请注意我必须使用字符串连接来构建我的字符串格式化程序?我认为应该采用更专业的方式来做到这一点。你有什么建议?
答案 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
,因此您有三种选择:
DateOfBirth = string.Format("{0:d}", myTable.DateOfBirth)
。这会导致空案例的空字符串。string.Format
测试无效,例如DateOfBirth = myTable.DateOfBirth.HasValue ? string.Format("Born on {0:d}.", myTable.DateOfBirth.Value) : "Date of birth unknown";
ToShortDateString
测试无效性; DateOfBirth = myTable.DateOfBirth.HasValue ? myTable.DateOfBirth.ToShortDateString() : "Date of birth unknown";
。