Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在更改字符串的格式。运行时的格式参数_C#_String Formatting - Fatal编程技术网

C# 正在更改字符串的格式。运行时的格式参数

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

我的旧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),
所以请注意,我必须使用字符串连接来构建我的字符串格式化程序?我只是觉得应该有一个更专业的方法来做这件事。你有什么建议?

使用方法

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
包含了各种信息,这些信息通常因语言和地区而异,但包括个人偏好。因此,对于我来说,while
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)
(在我的系统中,
今天是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)