C# 是否使用当前线程区域性设置日期格式,而不是使用月份和日期的两位数?
我想在网页上显示一些数据行,其中一列是日期时间。 我希望根据当前线程区域性显示日期格式 现在,我正在这样做(dt是日期时间): 但是,在某些文化中,月和日仅表示为一位数(小时),例如: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方法我可以使用,但这使得当前的文化变得无关紧要 有什么方法可以实现我想要做的吗?如果你想根据当前的文化展示它,那么
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)但是还有一个左零的问题来源:是的,我也试过了。它确实显示两位数字,但不尊重区域性的正确日期格式。。。例如,在美国,它应该是MM/dd/yyyy。然后,要尝试的另一个选项是在服务器的控制面板上设置默认值,因此,例如,如果它在美国,它会给出两位数字。如果您可以这样做(不是100%确定),请再次尝试您的代码,看看它是否正确格式化)
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;
}