Convert.ToDateTime(string)方法的格式

时间:2014-08-18 11:19:18

标签: c# .net

当我们执行时 Convert.ToDateTime('08/01/2014')如何转换为2014年8月1日(忽略格式)而不是2014年1月8日?

据我所知,没有提及传递给此方法的字符串参数的任何格式。

3 个答案:

答案 0 :(得分:3)

No mention?

  

如果 value 不是 null ,则返回值是使用格式在上调用DateTime.Parse方法的结果为当前文化初始化的DateTimeFormatInfo对象中的信息。

答案 1 :(得分:2)

首先,它是Convert.ToDateTime("08/01/2014")而不是Convert.ToDateTime('08/01/2014')。字符串用双引号表示,而不是单引号。

Convert.ToDateTime(string)方法默认使用CurrentCulture作为IFormatProvider。这是怎样的implemented;

public static DateTime ToDateTime(String value)
{
     if (value == null)
         return new DateTime(0);
     return DateTime.Parse(value, CultureInfo.CurrentCulture);
}

DateTime.Parse(string, IFormatProvider) implemented as;

public static DateTime Parse(String s, IFormatProvider provider)
{
    return (DateTimeParse.Parse(s, DateTimeFormatInfo.GetInstance(provider), DateTimeStyles.None));
}

来自documentation;

  

如果value不为null,则返回值是调用的结果   使用a中的格式信息对值的DateTime.Parse方法   为当前区域性初始化的DateTimeFormatInfo对象。    value参数必须包含日期和时间的表示   以DateTimeFormatInfo主题中描述的格式之一。

那么,这里的 DateTimeFormatInfo主题到底是什么?它是DateTimeFormatInfo的{​​{1}}信息。

您当前的帖子文化很可能只有MM/dd/yyyy而非dd/MM/yyyy(或哪个字符是CurrentCulture的{​​{3}},因为DateTimeFormatInfo.GetAllDateTimePatterns method具有特殊含义as 将当前文化或指定的文化日期分隔符替换为DateSeparator

您可以查看CurrentCulture with;

的所有标准日期和时间格式
var patterns = CultureInfo.CurrentCulture.
                           DateTimeFormat.
                           GetAllDateTimePatterns();
foreach (var format in patterns)
{
    Console.WriteLine(format);
}

让我举个例子;我目前的帖子文化是土耳其语(tr-TR)。它以dd.MM.yyyy作为标准日期和时间格式。

这就是为什么当我在我的代码中编写Convert.ToDateTime("02.01.2014")时,它将此字符串解析为 1月2日而不是 2月1日

  

@SonerGönül我的CurrentCulture是“en-US”! - Salihdeen 3分钟前

正如我所说的那样,您的en-USMM/dd/yyyy但不是dd/MM/yyyy作为标准日期和时间格式。这就是为什么使用08/01/2014模式解析的MM/dd/yyyy字符串不是dd/MM/yyyy

var patterns = CultureInfo.GetCultureInfo("en-US").
                       DateTimeFormat.
                       GetAllDateTimePatterns();
foreach (var format in patterns)
{
    Console.WriteLine(format);
}

结果将是;

M/d/yyyy
M/d/yy
MM/dd/yy
MM/dd/yyyy <-- HERE!
yy/MM/dd
yyyy-MM-dd
dd-MMM-yy
dddd, MMMM dd, yyyy
MMMM dd, yyyy
dddd, dd MMMM, yyyy
dd MMMM, yyyy
dddd, MMMM dd, yyyy h:mm tt
dddd, MMMM dd, yyyy hh:mm tt
dddd, MMMM dd, yyyy H:mm
dddd, MMMM dd, yyyy HH:mm
MMMM dd, yyyy h:mm tt
MMMM dd, yyyy hh:mm tt
MMMM dd, yyyy H:mm
MMMM dd, yyyy HH:mm
dddd, dd MMMM, yyyy h:mm tt
dddd, dd MMMM, yyyy hh:mm tt
dddd, dd MMMM, yyyy H:mm
dddd, dd MMMM, yyyy HH:mm
dd MMMM, yyyy h:mm tt
dd MMMM, yyyy hh:mm tt
dd MMMM, yyyy H:mm
dd MMMM, yyyy HH:mm
dddd, MMMM dd, yyyy h:mm:ss tt
dddd, MMMM dd, yyyy hh:mm:ss tt
dddd, MMMM dd, yyyy H:mm:ss
dddd, MMMM dd, yyyy HH:mm:ss
MMMM dd, yyyy h:mm:ss tt
MMMM dd, yyyy hh:mm:ss tt
MMMM dd, yyyy H:mm:ss
MMMM dd, yyyy HH:mm:ss
dddd, dd MMMM, yyyy h:mm:ss tt
dddd, dd MMMM, yyyy hh:mm:ss tt
dddd, dd MMMM, yyyy H:mm:ss
dddd, dd MMMM, yyyy HH:mm:ss
dd MMMM, yyyy h:mm:ss tt
dd MMMM, yyyy hh:mm:ss tt
dd MMMM, yyyy H:mm:ss
dd MMMM, yyyy HH:mm:ss
M/d/yyyy h:mm tt
M/d/yyyy hh:mm tt
M/d/yyyy H:mm
M/d/yyyy HH:mm
M/d/yy h:mm tt
M/d/yy hh:mm tt
M/d/yy H:mm
M/d/yy HH:mm
MM/dd/yy h:mm tt
MM/dd/yy hh:mm tt
MM/dd/yy H:mm
MM/dd/yy HH:mm
MM/dd/yyyy h:mm tt
MM/dd/yyyy hh:mm tt
MM/dd/yyyy H:mm
MM/dd/yyyy HH:mm
yy/MM/dd h:mm tt
yy/MM/dd hh:mm tt
yy/MM/dd H:mm
yy/MM/dd HH:mm
yyyy-MM-dd h:mm tt
yyyy-MM-dd hh:mm tt
yyyy-MM-dd H:mm
yyyy-MM-dd HH:mm
dd-MMM-yy h:mm tt
dd-MMM-yy hh:mm tt
dd-MMM-yy H:mm
dd-MMM-yy HH:mm
M/d/yyyy h:mm:ss tt
M/d/yyyy hh:mm:ss tt
M/d/yyyy H:mm:ss
M/d/yyyy HH:mm:ss
M/d/yy h:mm:ss tt
M/d/yy hh:mm:ss tt
M/d/yy H:mm:ss
M/d/yy HH:mm:ss
MM/dd/yy h:mm:ss tt
MM/dd/yy hh:mm:ss tt
MM/dd/yy H:mm:ss
MM/dd/yy HH:mm:ss
MM/dd/yyyy h:mm:ss tt
MM/dd/yyyy hh:mm:ss tt
MM/dd/yyyy H:mm:ss
MM/dd/yyyy HH:mm:ss
yy/MM/dd h:mm:ss tt
yy/MM/dd hh:mm:ss tt
yy/MM/dd H:mm:ss
yy/MM/dd HH:mm:ss
yyyy-MM-dd h:mm:ss tt
yyyy-MM-dd hh:mm:ss tt
yyyy-MM-dd H:mm:ss
yyyy-MM-dd HH:mm:ss
dd-MMM-yy h:mm:ss tt
dd-MMM-yy hh:mm:ss tt
dd-MMM-yy H:mm:ss
dd-MMM-yy HH:mm:ss
MMMM dd
MMMM dd
yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK
yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK
ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
yyyy'-'MM'-'dd'T'HH':'mm':'ss
h:mm tt
hh:mm tt
H:mm
HH:mm
h:mm:ss tt
hh:mm:ss tt
H:mm:ss
HH:mm:ss
yyyy'-'MM'-'dd HH':'mm':'ss'Z'
dddd, MMMM dd, yyyy h:mm:ss tt
dddd, MMMM dd, yyyy hh:mm:ss tt
dddd, MMMM dd, yyyy H:mm:ss
dddd, MMMM dd, yyyy HH:mm:ss
MMMM dd, yyyy h:mm:ss tt
MMMM dd, yyyy hh:mm:ss tt
MMMM dd, yyyy H:mm:ss
MMMM dd, yyyy HH:mm:ss
dddd, dd MMMM, yyyy h:mm:ss tt
dddd, dd MMMM, yyyy hh:mm:ss tt
dddd, dd MMMM, yyyy H:mm:ss
dddd, dd MMMM, yyyy HH:mm:ss
dd MMMM, yyyy h:mm:ss tt
dd MMMM, yyyy hh:mm:ss tt
dd MMMM, yyyy H:mm:ss
dd MMMM, yyyy HH:mm:ss
MMMM, yyyy
MMMM, yyyy

答案 2 :(得分:0)

使用此功能。

DateTime.ParseExact(string datetime, string format, IFormatProvider provider)

例如:

DateTime.ParseExact("08-01-2014", "MM-dd-yyyy", new CultureInfo("en-US"))