.NET DateTime.ToString()-默认格式设置

.NET DateTime.ToString()-默认格式设置,.net,vb.net,datetime,cultureinfo,date-formatting,.net,Vb.net,Datetime,Cultureinfo,Date Formatting,ToString的默认格式是否依赖于任何与服务器相关的内容?问题是:我正在本地计算机上测试并已经测试了一个应用程序,默认情况下,ToString()以“MM/dd/yyyyy hh:MM:ss tt”格式返回,但是在我们的服务器上,它似乎以“dd/MM/yyyy hh:MM:ss tt”的形式返回,这是消费应用程序所不期望的,并且会导致错误 Dim uvExpireDate = DateTime.Now.AddMinutes(1) Dim token = String.Format(fmtStr

ToString的默认格式是否依赖于任何与服务器相关的内容?问题是:我正在本地计算机上测试并已经测试了一个应用程序,默认情况下,ToString()以“MM/dd/yyyyy hh:MM:ss tt”格式返回,但是在我们的服务器上,它似乎以“dd/MM/yyyy hh:MM:ss tt”的形式返回,这是消费应用程序所不期望的,并且会导致错误

Dim uvExpireDate = DateTime.Now.AddMinutes(1)
Dim token = String.Format(fmtString, uvExpireDate.ToUniversalTime().ToString(), [various other params])

提前感谢您的帮助。

格式取决于服务器上定义的默认区域性

如果希望应用特定的区域性,则需要使用一个重载,该重载接受
IFormatProvider
,或者将当前线程
Culture
UICulture
设置为所需的区域性

InvariantCulture
是一种不代表特定区域性的区域性,但基于
en-US
,因此可能适合您使用:

uvExpireDate.ToUniversalTime().ToString(CultureInfo.InvariantCulture)
因此,整个路线将是:

Dim token = String.Format(fmtString, _ 
            uvExpireDate.ToUniversalTime().ToString(CultureInfo.InvariantCulture), _ 
            [various other params])
计算机“区域和语言选项”(控制面板)指定日期格式

您可以硬编码日期格式: 例如:

uvExpireData.ToString(@"yyyyMMdd HH.mm.ss")
演示如果无法在服务器上更改区域性,如何使用代码设置区域性(可能会应用意外后果定律):


尝试切换(CultureInfo.InvariantCulture)+1,灯泡就会打开。只有我们的加拿大客户有问题:)非常感谢。这是一个复杂的问题。CultureInfo基于机器的语言,而不是机器的格式选项。这是两件不同的事情,也是Windows/Net二分法在这一领域造成如此多地狱的部分原因。例如,我在澳大利亚。我的日期格式设置为d/MM/yyyy。在“格式”下拉列表中,显示“英语(澳大利亚)”。但是,我的语言是en-US,因为没有en-AU语言。我的计算机上只安装了1种语言,我可以通过转到“区域”下的“其他设置…”来检查这一点。CultureInfo.CurrentUICulture=new CultureInfo(“en-AU”);var culture=CultureInfo.CurrentUICulture;系统.诊断.调试.写线(培养基);System.Diagnostics.Debug.WriteLine(DateTime.Now);这段代码应该输出一个澳大利亚格式的日期,但是它没有。输出是:en AU 3/4/2016 10:54:28 AM(日期和月份大约是错误的)调试器告诉我当前区域性是FullDateTimePattern=“ddddd,d MMMM yyyy h:mm:ss tt”,而ToString()给了我完全不同的东西。
using System;
using System.Globalization;
using System.Threading;

public class FormatDate
{
   public static void Main()
   {
      DateTime dt = DateTime.Now;
      // Sets the CurrentCulture property to U.S. English.
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
      // Displays dt, formatted using the ShortDatePattern
      // and the CurrentThread.CurrentCulture.
      Console.WriteLine(dt.ToString("d"));

      // Creates a CultureInfo for German in Germany.
      CultureInfo ci = new CultureInfo("de-DE");
      // Displays dt, formatted using the ShortDatePattern
      // and the CultureInfo.
      Console.WriteLine(dt.ToString("d", ci));
   }
}