我正在为Windows Phone开发一款应用。由于世界各地使用不同的日期格式,Windows Phone中的日期选择器将为印度用户显示 dd-MM-yyyy ,为用户显示 MM / dd / yyyy 在美国,仅举例。因此,我的应用程序崩溃,因为它设置为仅对特定模块使用 MM / dd / yyyy 格式。
你可以帮我一些代码片段,因为我无法找到解决方案吗?
修改 我的尝试
DateTime dt = DateTime.ParseExact(x.msDate.ToString(),"M/d/yyyy",System.Globalization.CultureInfo.InvariantCulture);
答案 0 :(得分:4)
使用运行代码的机器的当前文化:
MyDateTime.ToString(CultureInfo.CurrentCulture)
或运行UI代码的机器的当前文化:
MyDateTime.ToString(CultureInfo.CurrentUICulture)
或传递特定文化:
MyDateTime.ToString(new CultureInfo("en-US"))
您的示例指定了一种不变文化,因此它会期望默认的DateTime字符串格式。 http://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx
如果您可以通过UTC传递日期时间,那么这也会让您的生活更加轻松。
答案 1 :(得分:1)
像你一样解析字符串日期是危险的。您应该使用需要年,月和日的DateTime构造函数,这样才能安全
DateTime date1 = new DateTime(2010, 8, 18);
或者
所以你可以使用TryParseExact http://msdn.microsoft.com/en-us/library/system.datetime.tryparseexact(v=vs.110).aspx
答案 2 :(得分:1)
从您的注释中读取,x.msDate是存储在数据库中的字符串。如果可以针对不同的文化格式化此字符串,并且在解析时需要一点灵活性,则可以使用TryParse方法。有一个重载将IFormatProvider作为输入。如果要以不同于当前区域性格式的格式解析包含DateTime的日期,则可以在解析DateTime时创建CultureInfo并使用其DateTimeFormat属性:
DateTime dt;
if (!DateTime.TryParse(stringValue, out dt)
{
if (!DateTime.TryParse(stringValue, new CultureInfo("en-US").DateTimeFormat, DateTimeStyles.None, out dt)
throw new ArgumentException("Unable to parse date");
}
// If you reach this line, you were able to parse the DateTime.
您还可以创建一个文化列表,并尝试使用各种文化设置解析字符串。成功解析字符串后,返回值:
public DateTime ParseString(string value)
{
CultureInfo[] cultures = {CultureInfo.CurrentCulture,
new CultureInfo("en-US"),
new CultureInfo("de-DE")};
foreach(var cult in cultures)
{
DateTime dt;
if (DateTime.TryParse(value, cult, DateTimeStyles.None, out dt))
return dt;
}
throw new ArgumentException(
string.Format("Unable to parse DateTime for string {0}.", value));
}
答案 3 :(得分:0)
所有答案的组合对我来说都很有用。成功的实施代码:
DateTime originalDate,dt;
String msDate = "24-12-2013";
String[] format = {"d-M-yyyy","M/d/yyyy"};
CultureInfo enUS = new CultureInfo("en-US");
foreach (var frmt in format)
{
if(DateTime.TryParseExact(msDate, frmt, enUS, DateTimeStyles.None,out dt))
{
originalDate = dt;
Console.WriteLine(originalDate.ToString());
}
}
答案 4 :(得分:0)
愿这会帮到你
string dateTime= Convert.ToDateTime(datepicker.Value).ToString("M/d/yyyy", System.Globalization.CultureInfo.InvariantCulture);