此代码返回给我'M/d/yyyy'
,但我需要'mm/dd/yyyy'
这是怎么回事?
((CultureInfo)Session["culture"]).DateTimeFormat.ShortDatePattern)
答案 0 :(得分:1)
自那以后,这种情况并没有多少......你想要的模式是针对特定的文化...... 例如:
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一样)
答案 1 :(得分:0)
您可以通过在ToString
方法中指定所需的模板来覆盖日期的显示方式:
DateTime.Now.ToString("MM/dd/yyyy")) //Will display "12/21/2012"
您似乎正在使用CultureInfo
对象,其中包含默认格式(以及其他文化信息,如货币),并由操作系统提供。
单独调用DateTime.Now.ToShortDateString()
将使用当前线程文化中ShortDatePattern
指定的格式,可以使用以下内容设置:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
答案 2 :(得分:0)
你的意思是你想改变房产?这很简单:
((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"
或"mm"
分钟,"M"
或"MM"
月。此外"/"
是文化的DateSeparator
(在某些文化中可能会转换为短划线(-
)或其他内容。)