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

时间:2011-11-18 20:48:04

标签: .net vb.net datetime cultureinfo date-formatting

ToString的默认格式是否依赖于与服务器相关的任何内容?这是问题:我正在测试并在我的本地机器上测试了一个应用程序,默认情况下,ToString()以“MM / dd / yyyy 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])

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

格式取决于服务器上定义的默认文化。

如果您想要应用特定的文化,则需要使用带有IFormatProvider的重载,或者将当前线程CultureUICulture设置为所需的文化。

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

uvExpireDate.ToUniversalTime().ToString(CultureInfo.InvariantCulture)

所以,整行将是:

Dim token = String.Format(fmtString, _ 
            uvExpireDate.ToUniversalTime().ToString(CultureInfo.InvariantCulture), _ 
            [various other params])

答案 1 :(得分:0)

计算机“区域和语言选项”(控制面板)指定日期格式。

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

uvExpireData.ToString(@"yyyyMMdd HH.mm.ss")

答案 2 :(得分:0)

MSDN显示如果您无法在服务器上更改文档,如何使用代码来设置文化(可能适用非预期后果法则):

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));
   }
}
相关问题