C# 正在更改字符串的格式。运行时的格式参数
我的旧LINQ代码过去有如下内容:C# 正在更改字符串的格式。运行时的格式参数,c#,string-formatting,C#,String Formatting,我的旧LINQ代码过去有如下内容: DateOfBirth = string.Format("{0:MM/dd/yyyy}", myTable.DateOfBirth), 但现在我想能够格式化用户如何从Windows更改其日期模式,所以我将其更改为这样,并且它可以工作: string regionShortDate = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern; string temp = "{0:" + region
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),
所以请注意,我必须使用字符串连接来构建我的字符串格式化程序?我只是觉得应该有一个更专业的方法来做这件事。你有什么建议?使用方法
ToSortDateString方法返回的字符串为
文化敏感。它反映了当前系统定义的模式
区域性的DateTimeFormatInfo对象。例如,对于en-US
文化,标准短日期模式为“M/d/yyyy”;为了德德
文化,它是“dd.MM.yyyy”;对于ja-JP文化,它是“yyy/M/d”。
特定计算机上的特定格式字符串也可以是
自定义,使其不同于标准的短日期格式
绳子
及
当前DateTime对象的值是使用
由DateTimeFormatInfo.ShortDatePattern属性定义的模式
与当前线程区域性关联。返回值为
与通过指定“d”标准返回的值相同
使用ToString(string)方法设置日期时间格式字符串
您可以按照Habib的建议使用
ToSortDateString
它取决于CultureInfo。CurrentCulture
,因为CultureInfo
包含了各种信息,这些信息通常因语言和地区而异,但包括个人偏好。因此,对于我来说,whileCurrentCulture.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)
(在我的系统中,今天是2014年1月24日。
在你的系统中,可能还有其他功能)
还有其他类似的方法可以使用
编辑:
既然您刚刚指出您使用的是DateTime?
而不是DateTime
,那么您有三个选择:
使用DateOfBirth=string.Format(“{0:d}”,myTable.DateOfBirth)
。这将导致空字符串
使用string.Format
,例如DateOfBirth=myTable.DateOfBirth.HasValue?string.Format(“出生日期{0:d}.”,myTable.DateOfBirth.Value):“出生日期未知”
使用ToSortDateString
;DateOfBirth=myTable.DateOfBirth.HasValue?myTable.DateOfBirth.ToSortDateString():“出生日期未知”
,测试空值
好的,我现在就试试,谢谢。但是昨天我遇到了一些情况,我的代码说的是DateTime.now.ToString(“MM/dd/yyyy”),我想用“ToSortDateString”在这种情况下,它没有按预期工作。不知道为什么tho@DevWannaBe,ToSortDateString
将根据客户端计算机区域性设置返回字符串。它可以是MM/dd/yyyy
或dd/MM/yyyy
,这似乎就是您在问题中试图使用您的代码所做的。哦,好的,我读了您在明白了,它说它在使用“文化”,比如“en-US”或“en-CA”…但这不是我想要的。在“控制面板区域设置”中,您仍然可以将其保存在美国,但将短日期模式更改为yy/MM/dd,这样它就不会看到该模式。@DevWannaBe,ToSortDateString
将为您提供与您的代码相同的输出,我刚刚在VS中尝试,选择了yy MM dd
作为格式和日期时间。Now.ToShortDateSt环()返回的14-01-24
@devwanabe,在调用该方法之前,您需要检查HasValue
,否则您将得到一个无效的操作异常可空对象必须有一个值。
但不是NRE。@devwanabe,如果它为null是因为String.Forma,那么您不会得到异常的原因是它t、 看到这个问题,谢谢Jon提供的详细信息。
string.Format("Today is {0:d}.", DateTime.Now)