获取特定文化中的Utc日期时间,与我当前的UI文化无关

时间:2014-03-14 05:53:39

标签: c# .net datetime cultureinfo

如果我的申请是阿拉伯文化,那么 DateTime.UtcNow 会为我们提供阿拉伯语部落日期时间,例如“13/05/1435 09:40:45ص”但是我需要 en-US 我的用户使用的文化。

当我强制将此日期转换为我们的文化时,它会给我一个错误。什么是获得 en-US 日期时间的更好方法,即使在阿拉伯文化中也是如此“14/03/2014 09:40:45 AM”

var us = DateTime.Now.ToString("dd/MM/yy HH:mm:ss tt",
            new System.Globalization.CultureInfo("en-US"));

            string st = us.ToString();

            DateTime ddt = Convert.ToDateTime(st,
            new System.Globalization.CultureInfo("en-US"));

en-US 中再次从st转换为DateTime时当Application在阿拉伯文化中时,它会抛出错误。 enter image description here

Mr @ lastr2d2

提前致谢。

2 个答案:

答案 0 :(得分:2)

这是你排除的吗?

var ar = DateTime.Now.ToString("dd/MM/yy HH:mm:ss tt",
            new System.Globalization.CultureInfo("ar-AE"));
// 14/03/14 06:14:34 ص
var us = DateTime.Now.ToString("dd/MM/yy HH:mm:ss tt",
            new System.Globalization.CultureInfo("en-US"));
// 14/03/14 06:14:44 AM

<强> - 修改

您可以按DateTime.ParseExact获取日期时间实例:

var datetime = DateTime.ParseExact(us,"dd/MM/yy HH:mm:ss tt",
            new System.Globalization.CultureInfo("en-US"));

答案 1 :(得分:0)

您获得异常的原因是字符串未被识别为有效的DateTime,原因是您在格式化为字符串时明确指定了格式,但在解析时没有。 14/03/14是不明确的(哪一个是年份,哪一个是月?)所以它无法解析。

您有两个选择,(1)不要明确说明格式并允许在大多数情况下能够解析的默认值,或者(2)在解析时明确说明格式。

通常,解析日期很难,并且日期控件可以更好地处理来自用户的日期。解析日期作为交换(存储或网络)的一部分是合法的,但在这种情况下应受国际标准(ISO 8601)管辖,而不是语言特定格式。

我也想知道问题是你想要用格里高利历来格式化并允许语言成为应用程序的语言,但如果是这样,那就是一个不同的问题... < / p>