我不明白为什么我会发现这样的问题。
我有一个简单的表格,上面有一个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
对象,而不是包含日期和时间的字符串。
非常感谢
将 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")
的英国文化信息,它会输出一个包含dd/MM/yyyy HH:mm:ss
的字符串。
对于带有ToString(new CultureInfo("en-US")
的美国文化信息,它会输出一个包含MM/dd/yyyy HH:mm:ss
的字符串。
希望这有帮助
日期时间包含常规日期时间信息。可以创建特定于区域性的字符串表示形式。试试这个:
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
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"));