C# 获取特定区域性中的Utc datetime,与我当前的UI区域性无关

C# 获取特定区域性中的Utc datetime,与我当前的UI区域性无关,c#,.net,datetime,cultureinfo,C#,.net,Datetime,Cultureinfo,如果我的应用程序是在阿拉伯文化中,那么DateTime.UtcNow为我们提供了阿拉伯语的clander DateTime,如“13/05/1435 09:40:45”,但我需要在en us中使用它,无论我的用户使用什么文化 当我被迫将此日期转换为美国文化时,它会给我一个错误。在阿拉伯文化中,哪种方式能更好地获取我们的日期时间?2014年3月14日09:40:45 AM var us = DateTime.Now.ToString("dd/MM/yy HH:mm:ss tt",

如果我的应用程序是在阿拉伯文化中,那么
DateTime.UtcNow
为我们提供了阿拉伯语的clander DateTime,如“13/05/1435 09:40:45”,但我需要在en us中使用它,无论我的用户使用什么文化

当我被迫将此日期转换为美国文化时,它会给我一个错误。在阿拉伯文化中,哪种方式能更好地获取我们的日期时间?2014年3月14日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时,如果应用程序是在阿拉伯文化中,则会抛出错误。

@lastr2d2先生


提前谢谢。

这就是你所期待的吗

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实例:


该字符串未被识别为有效的日期时间,这是因为在格式化为字符串时已显式指定格式,但在解析时未显式指定格式。14/03/14不明确(哪一个是年,哪一个是月?),因此无法解析

您有两个选项,(1)不显式声明格式并允许在大多数情况下可以解析的默认格式,或者(2)在解析时显式声明格式

通常,解析日期很困难,从用户处获取日期最好由日期控件处理。作为交换(到存储器或网络)的一部分对日期进行解析是合法的,但在这种情况下,应遵循国际标准(ISO 8601),而不是特定于语言的格式


我还想知道问题是否在于您希望使用公历进行格式化,并允许该语言成为应用程序的语言,但如果是这样,那是另一个问题…

否,
DateTime.UtcNow
为您提供了一个
DateTime
<代码>日期时间没有任何格式。将其转换为字符串时,将应用区域性。不要混淆在字符串和
DateTime
s之间转换时发生的格式设置以及实际存储的内容。您不应该只需要将字符串转换为
string
,然后立即将其转换回
DateTime
。你们为什么认为你们需要这样做?我很感谢你们的帮助,也很感谢你们的回应,但问题是。字符串st=us.ToString();DateTime ddt=Convert.ToDateTime(st,new System.Globalization.CultureInfo(“en-US”);当我再次从字符串转换为dateTime时,会出现阿拉伯文化中不可能出现的错误,我在问题中添加了快照。@syedAhsanJaffri我已更新了我的答案。请检查是的,我知道,但问题是DateTime.ParseExact会转换,我知道,但DateTime将是“{13/05/35 12:46:05م}”意思是阿拉伯的克兰德尔日期,但我希望在阿拉伯文化中也使用en-US日期格式,如“14/03/2014 09:40:45 AM”@syedAhsanJaffri@Damien在他的评论中所说,
DateTime
没有任何格式。它是一个
对象
,您看到的“{13/05/35 12:46:05م}”是一个
字符串
(dateTimeObject.ToString()的结果)。用户永远不会看到
DateTime
对象,他们唯一会看到的是
字符串,您可以控制该字符串的生成。简言之,始终使用,并且您很好,您甚至可以为此创建扩展方法。
var datetime = DateTime.ParseExact(us,"dd/MM/yy HH:mm:ss tt",
            new System.Globalization.CultureInfo("en-US"));