C# 如何在c语言中基于区域性动态转换日期时间

C# 如何在c语言中基于区域性动态转换日期时间,c#,C#,我已经在C中创建了WPF应用程序。在这个应用程序中,我创建了一个报告,它是GetDatefromUser。对于get date,我使用C datetime控件。My datetime控件根据计算机区域性显示值。例如,在我的机器中,当我从控件中选择日期时,显示27-1-2017 12.00.00 am;当我在其他机器中测试我的应用程序时,显示27/1/2017 12.00.00 am 所以我的问题是,我得到的错误字符串未被识别为有效的日期时间。当转换日期时间时 我尝试了DateTime.Parse

我已经在C中创建了WPF应用程序。在这个应用程序中,我创建了一个报告,它是GetDatefromUser。对于get date,我使用C datetime控件。My datetime控件根据计算机区域性显示值。例如,在我的机器中,当我从控件中选择日期时,显示27-1-2017 12.00.00 am;当我在其他机器中测试我的应用程序时,显示27/1/2017 12.00.00 am

所以我的问题是,我得到的错误字符串未被识别为有效的日期时间。当转换日期时间时

我尝试了DateTime.ParseExact、DateTime.Parse,但仍然无法成功解决问题

 DateTime l_dtFrom = Convert.ToDateTime("27-1-2017 12.00.00 AM", CultureInfo.CurrentCulture);
 string l_sFromDate = l_dtFrom.ToString("yyyy-MM-dd HH:mm:ss");
试一试

使用ParseExact,您应该传递字符串所传递的确切格式

或者尝试使用CultureInfo.InvariantCulture作为Convert.ToDateTime中的格式提供程序


编辑:根据您提供的字符串格式,我更新了我的答案。请立即查看格式。

为了避免解析依赖于当前UI线程区域性的日期时间字符串,而当前UI线程区域性又可能依赖于客户端的区域设置,您应该从DatePicker控件获取SelectedValue


如果您使用的是另一个控件,最确定的是,它将以DateTime或更好的方式交付所选值,作为DateTime?空表示没有选择。使用此选项,以不区分区域性的方式工作。

您确定需要进行任何转换吗?你说的是c datetime控件,它应该以datetime值而不是字符串的形式为你提供值,你确定你访问了该控件的正确属性吗?实际上,我在测试应用程序windows 10 64位时遇到了这个问题。它在windows 8.1 32位机器上运行良好。根据代码日期控制显示基于区域性的日期和时间,因此在windows 8中,机器显示日期以破折号分隔,windows 10显示日期以斜线/分隔。这就是为什么我要问,确切地说,我的应用程序日期控制使用基于客户区域设置的日期时间格式。这就是为什么我需要在代码中转换日期时间。
DateTime result = DateTime.ParseExact("27-1-2017 12.00.00 AM", "dd-MM-yyyy hh.mm.ss a", CultureInfo.InvariantCulture);