2014-03-14 21 views
1

如果我的应用是在阿拉伯文化则DateTime.UtcNow为我们提供了阿拉伯语clander日期时间像“13/05/1435 9时40分45秒ص”,但我需要它在zh-CN我的用户曾经使用过什么文化。获取UTC日期时间在特定的文化独立我当前UI文化

当我强制将这个日期转换为我们的文化时,它给了我一个错误。即使在像这样的阿拉伯文化中,获得en-US datetime的更好方法是什么“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")); 

当从ST中转换为DateTime同样的en-US当应用程序在阿拉伯文化中扔了错误。 enter image description here

@先生提前lastr2d2

感谢。

+1

没有, 'DateTime.UtcNow'给你一个'DateTime'。 'DateTime'不*有*任何格式。当您将其转换为**字符串**时,会应用文化。不要混淆**格式**,当你在字符串和DateTime之间进行转换时,以及实际存储的内容**。 –

+0

您不需要转换为“字符串”,然后立即尝试将其转换回“DateTime”。你为什么认为你需要这样做? –

回答

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得到DateTime实例:

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

我感谢你的帮助,真的很感谢你的回应,但问题在于此。 string st = us.ToString(); DateTime ddt = Convert.ToDateTime(st, new System.Globalization。的CultureInfo( “EN-US”)); 当我从字符串转换为dateTime再次它给错误,不可能在阿拉伯文化我在我的问题中添加快照。 –

+1

@syedAhsanJaffri我已经更新了我的答案。请检查 – lastr2d2

+0

是的,我知道,但问题是,DateTime.ParseExact会转换我知道,但日期时间将是“{13/05/35 12:46:05}}” 意味着阿拉伯语Clander日期,但我想en-US日期Formate in阿拉伯文化也像“14/03/2014 09:40:45 AM” –

0

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

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

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

我想知道太多,如果该问题是,您想用公历格式化,让语言成为应用程序的语言,但即便如此,这是一个不同的问题...