这段代码返回给我'M/d/yyyy'
,但我需要'mm/dd/yyyy'
怎么做?
((CultureInfo)Session["culture"]).DateTimeFormat.ShortDatePattern)
这段代码返回给我'M/d/yyyy'
,但我需要'mm/dd/yyyy'
怎么做?
((CultureInfo)Session["culture"]).DateTimeFormat.ShortDatePattern)
这并没有多大意义……您想要的模式是针对特定文化的……例如:
DateTime.Now.ToString(CultureInfo.GetCultureInfo("en-US").DateTimeFormat.ShortDatePattern);
会回来mm/dd/yyyy
但是
DateTime.Now.ToString(CultureInfo.GetCultureInfo("en-GB").DateTimeFormat.ShortDatePattern);
将返回dd/mm/yyyy
。
从您添加的代码中,它不是很清楚 - 似乎您正在获得一种特定的文化,但随后想要覆盖ShortDatePattern
......
如果这是真的,为什么首先使用会话中收到的文化?在不考虑文化的情况下使用您想要的任何模式。例如DateTime.Now.ToString("MM/dd/yyyy");
(无论如何,可以覆盖,ShortDatePattern
可以设置,就像评论中显示的@mipe34)
您可以通过在ToString
方法中指定所需的模板来覆盖日期的显示方式:
DateTime.Now.ToString("MM/dd/yyyy")) //Will display "12/21/2012"
您似乎正在使用一个CultureInfo
对象,该对象包含默认格式(和其他文化信息,如货币)并由操作系统提供。
单独调用DateTime.Now.ToShortDateString()
将使用ShortDatePattern
当前线程文化中指定的格式,可以使用以下内容进行设置:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
你的意思是你想改变财产?这很简单:
((CultureInfo)Session["culture"]).DateTimeFormat.ShortDatePattern = "MM/dd/yyyy";
但是,如果CultureInfo
碰巧是只读的,它将抛出运行时。在那种情况下,也许您可以分配一个新CultureInfo
对象?如果可以,请这样做:
// get reference
var ci = (CultureInfo)Session["culture"];
// clone and reassign to get rid of read-only:
ci = (CultureInfo)(ci.Clone());
// change property:
ci.DateTimeFormat.ShortDatePattern = "MM/dd/yyyy";
// make read-only again
ci = CultureInfo.ReadOnly(ci);
// assign back to your "source":
Session["culture"] = ci;
之后,当人们调用一些取自 的someDateTimeValue.ToShortDateString()
新线程时,他们会得到你的新格式。CurrentCulture
Session["culture"]
注意:"m"
or"mm"
是分钟,"M"
or"MM"
是月。也是文化"/"
的DateSeparator
(在某些文化中可能转化为破折号 ( -
) 或其他内容)。