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#_.net_Asp.net_Asp.net Mvc_Datetime - Fatal编程技术网

C# 是否使用当前线程区域性设置日期格式,而不是使用月份和日期的两位数?

C# 是否使用当前线程区域性设置日期格式,而不是使用月份和日期的两位数?,c#,.net,asp.net,asp.net-mvc,datetime,C#,.net,Asp.net,Asp.net Mvc,Datetime,我想在网页上显示一些数据行,其中一列是日期时间。 我希望根据当前线程区域性显示日期格式 现在,我正在这样做(dt是日期时间): 但是,在某些文化中,月和日仅表示为一位数(小时),例如: 8/8/2011 8:57:59 AM 我希望日期显示如下: 08/08/2011 08:57:59 AM 如果有一个行列表,阅读起来会更容易(也更漂亮)。 我看到有一个String.format方法我可以使用,但这使得当前的文化变得无关紧要 有什么方法可以实现我想要做的吗?如果你想根据当前的文化展示它,那么

我想在网页上显示一些数据行,其中一列是日期时间。 我希望根据当前线程区域性显示日期格式

现在,我正在这样做(dt是日期时间):

但是,在某些文化中,月和日仅表示为一位数(小时),例如:

8/8/2011 8:57:59 AM
我希望日期显示如下:

08/08/2011 08:57:59 AM
如果有一个行列表,阅读起来会更容易(也更漂亮)。 我看到有一个
String.format
方法我可以使用,但这使得当前的文化变得无关紧要


有什么方法可以实现我想要做的吗?

如果你想根据当前的文化展示它,那么问题是什么?如果需要特定格式,则必须指定该格式

string text = myDateTime.ToString("{0:[your format]}");

我相信这默认为服务器格式-但是如果您尝试指定“u”作为格式代码,将年份放在第一位,那么我认为是两位数字。

您可以使用

String.Format("{0:dd/MM/yyyy hh:MM PM ", yourDatetime)
日期分隔符/(斜杠)和时间分隔符:(冒号)将被重写为当前DateTimeFormatInfo.DateSeparator和DateTimeFormatInfo.TimeSeparator中定义的字符

编辑:忘记将所需的对象参数添加到字符串中。格式化提供的解决方案可能有用

我只看到一个解决方案-您应该获取当前区域性显示格式,对其进行修补,使其满足您的要求,并最终使用修补的格式字符串格式化日期时间值

做一个决定

基于当前线程区域性

修改要替代的设置

然后将其设置回线程作为区域性,或者在格式化操作期间临时使用它

我们目前这样做是为了将所有日期格式化为国际上明确的格式DDMMMYYY,其中MMM仅为英文三字母缩写,但遵守当地的数字格式规则。/,等等

要重写的相关属性将使用System.Globalization。

;
私有静态CultureInfo defaultCulture=新的CultureInfo(“nl nl”);
公共静态文化信息GetCurrentCulture()
{
List=new List();
添加(新文化信息(“en-US”);
if(badCultures.Contains(System.Threading.Thread.CurrentThread.CurrentCulture))
回归文化;
返回System.Threading.Thread.CurrentThread.CurrentCulture;
}

你应该尊重用户的本地化设置。我想根据当前的文化来展示它,比如2011年2月24日Vs 2011年2月24日。。。但是没有2011年2月24日,因为它很难看,很难在列表中阅读。列出你想冒犯的文化,如果其中一种文化是当前文化,则使用默认文化。所以做一个方法GetCurrentCultureSorry,我不想冒犯任何人。。。我只是觉得在没有相同长度的视图中显示日期列表很难阅读。就个人而言,作为一个用户,我更希望看到一些双位数,但这可能只是我想根据当前的文化来展示它,比如2011年2月24日Vs 2011年2月24日。。。但是没有2011年2月24日,因为它很难看,很难在列表中阅读是的,我第一次这样做,但它只尊重“/”和“:”的文化,而不是正确的日期格式。。。例如,在美国,它应该是MM/dd/yyyy。@canam只是一个注释。。。如果你在专栏上做这件事,要小心。确保列显示了它是哪个区域性。想象一下“2011年1月12日”(dd/mm),下一行有一个日期“2011年1月12日”(mm/dd/YYY)。。。但是,由于我们有一个用户首选项来指定所需的区域性,用户应该知道应该期望什么。如果在同一列中没有多个区域性(所有日期都在当前记录的用户区域性中解析),则可以使用
string.format(“{0:g}”,yourDatetime)String.Format("{0:dd/MM/yyyy hh:MM PM ", yourDatetime)
using System.Globalization;
private static CultureInfo defaultCulture = new CultureInfo("nl-NL");

public static CultureInfo GetCurrentCulture()
{
    List<CultureInfo> badCultures = new List<CultureInfo>();
    badCultures.Add(new CultureInfo("en-US"));

    if (badCultures.Contains(System.Threading.Thread.CurrentThread.CurrentCulture))
        return defaultCulture;
    return System.Threading.Thread.CurrentThread.CurrentCulture;
}