c#日期格式 - 英国和美国

时间:2018-02-01 12:55:35

标签: c# datetime

我不明白为什么我发现这个问题。

我有一个简单的表单,上面有DateTimePicker(称为dtpStartDate)。我想要两个 DateTime个对象:一个用于英国格式,另一个用于美国格式。类似的东西:

 string str = "31/01/2018 10:00:00"; //dtpStartDate.Value.Date.ToString()

 DateTime dtUK = DateTime.ParseExact(str, "dd/MM/yyyy HH:mm:ss", null);
 DateTime dtUS = Convert.ToDateTime(dtUK, new CultureInfo("en-US"));

我做错了什么?我没有尝试过的东西给了我想要的东西,它是两个 DateTime个对象,而不是包含日期和时间的字符串。

非常感谢

3 个答案:

答案 0 :(得分:3)

将DateTime对象视为:

public class DateTime
{
    public int Year;
    public int Month;
    public int Day;
    public int Hours;
    public int Minutes;
    public int Seconds;
    public int Milliseconds;
}

这就是所有商店,它不包含任何与文化相关的信息。如果您要为“英国格式和美国格式”创建两个DateTime对象,它们将是相同的并包含相同的数据。

但是,当您在DateTime对象上调用ToString()方法时,可以向其传递CultureInfo参数。该参数告诉DateTime对象如何将这些值输出到结果字符串中。

因此,对于ToString(new CultureInfo("en-GB")的英国CultureInfo,它会输出一个包含dd/MM/yyyy HH:mm:ss的字符串 对于包含ToString(new CultureInfo("en-US")的美国CultureInfo,它会输出一个包含MM/dd/yyyy HH:mm:ss的字符串。

希望这有帮助

答案 1 :(得分:2)

DateTime包含常规日期时间信息。您可以创建特定于文化的字符串表示。试试这个:

string str = "31/01/2018 10:00:00";
DateTime dt = DateTime.ParseExact(str, "dd/MM/yyyy HH:mm:ss", null);
var uk = dt.ToString(new CultureInfo("en-GB")); //31/01/2018 10:00:00
var us = dt.ToString(new CultureInfo("en-US")); //1/31/2018 10:00:00 AM

答案 2 :(得分:-1)

string str = "31/01/2018 10:00:00"; //dtpStartDate.Value.Date.ToString()

DateTime dateTimeUK = DateTime.Parse(str, new CultureInfo("en-GB"));
DateTime dateTimeUS = DateTime.Parse(str, new CultureInfo("en-US"));