当我执行下面的代码时,我得到的日期格式为04-07-2015
,这是我想要的。
但是,当我在另一个服务器上执行相同的代码时,我得到的日期是7/4/2015
。为什么?
这是我在页面加载上的代码:
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
fillProject();
}
grdData.Visible = false;
TxtIndate.Value = System.DateTime.Now.ToShortDateString();
txtOutDate.Value = System.DateTime.Now.ToShortDateString();
}
ToShortDateString
方法使用CurrentCulture
设置的ShortDatePattern
属性。
可能您的服务器具有不同的区域性设置,这就是为什么当您运行此代码时,会得到DateTime
的不同字符串表示。
如果您想在两台服务器中获得相同的表示,请在区域和语言设置中为两台服务器设置相同的区域性,或者使用自定义日期和时间格式说明符,如;
TxtIndate.Value = DateTime.Now.ToString("dd-MM-yyyy");
或者Matt提到的一种更好的方法是使用InvariantCulture
和类似的字符串格式;
TxtIndate.Value = DateTime.Now.ToString("dd-MM-yyyy", CultureInfo.InvariantCulture );
从c#代码来看,同一代码似乎不可能产生两种不同的时间格式。所以据我所知,我们必须在其他地方找到它。
也许混淆的根源在于HTML输出中的两种不同类型的input
控件。一个type=text
,一个type=date
可以解释不同的格式,因为HTML5日期控件呈现不同。因此,一个日期是服务器格式化的值,另一个是浏览器,可能还有客户端文化,格式化的值。
正如其他海报所说,这是由于不同的文化。
如果具有相同的日期格式很重要(注意,用户希望以他们习惯的区域性格式查看日期(,那么您可以始终明确设置它。
var myCultureDateFormat = new CultureInfo("en-US").DateTimeFormat;
// Short date string
var shortDate = DateTime.Now.ToString(myCultureDateFormat.ShortDatePattern);
// Long date string
var longDate = DateTime.Now.ToString(myCultureDateFormat.LongDatePattern);
编码快乐!