在C#中将各种日期格式转换为MM / dd / yyyy

时间:2013-12-23 20:43:58

标签: c# windows-phone-7 datetime windows-phone-8 date-formatting

我正在为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);

5 个答案:

答案 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);