-2

这段代码返回给我'M/d/yyyy',但我需要'mm/dd/yyyy'怎么做?

((CultureInfo)Session["culture"]).DateTimeFormat.ShortDatePattern)
4

3 回答 3

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)

于 2012-12-21T16:49:54.067 回答
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");
于 2012-12-21T16:48:10.923 回答
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()新线程时,他们会得到你的新格式。CurrentCultureSession["culture"]

注意:"m"or"mm"分钟"M"or"MM"。也是文化"/"DateSeparator(在某些文化中可能转化为破折号 ( -) 或其他内容)。

于 2012-12-21T17:24:36.800 回答