【问题标题】:Timezone Conversion - C# [duplicate]时区转换 - C# [重复]
【发布时间】:2013-07-09 21:01:48
【问题描述】:

这次我希望将Mon, 25 03 2013 00:00:00 GMT 转换为美国东部标准时间。我知道这已经在这里发布过:Time zone conversion in C# 但我仍然遇到错误,因为字符串不完全正确。

这是我的代码:

var dateString = "Mon, 25 03 2013 00:00:00 GMT";
var date = Convert.ToDateTime(dateString);
var result = TimeZoneInfo.ConvertTime(date, TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time"));
Console.WriteLine(result);

这是我的错误:

Unhandled Exception: System.FormatException: String was not recognized as a valid DateTime.
at System.DateTime.Parse (System.String s, IFormatProvider provider, DateTimeStyles styles) [0x00000] in :0 
at System.DateTime.Parse (System.String s, IFormatProvider provider) [0x00000] in :0 
at System.DateTime.Parse (System.String s) [0x00000] in :0 

在 System.Convert.ToDateTime(System.String 值)[0x00000] in :0 在 Program.Main() [0x00000] in :0

我尝试将日期从 03 更改为 Mar,但我什至无法让它工作。我也尝试过其他论坛中的代码,只是想看看它是否有效,但我没有成功。我完全理解代码试图做什么,但我只是不明白为什么会抛出错误。

任何帮助将不胜感激!谢谢!

【问题讨论】:

  • 您在此处描述的大部分内容只是重复您在其他问题中已经提出的内容。我在这里没有看到任何关于时区转换的问题,所以我投票结束。
  • 您的代码在我的机器上运行。我刚刚复制并尝试运行它成功执行:)
  • 您是否尝试过使用 DateTime.Parse:msdn.microsoft.com/en-us/library/w2sa9yss.aspx 这个重载?
  • 另外,您要查找的时区 ID 只是 "Eastern Standard Time"。将"US " 从其前面删除。
  • 没问题。我们随时为您提供帮助!

标签: c# visual-studio-2010 datetime


【解决方案1】:

尝试将您的日期字符串解析为以下内容:

 DateTime date = DateTime.ParseExact(datestring, "ddd dd MMM yyyy h:mm tt zzz", CultureInfo.InvariantCulture);

【讨论】:

    【解决方案2】:
    var dateString = "Mon, 25 03 2013 00:00:00 GMT";
    

    应该是这样的:

    var dateString = "Mon, 25 Mar 2013 00:00:00 GMT";
    

    编辑:固定月份。

    【讨论】:

    • 我已经尝试过了。没有骰子。
    • 废话,我以为这对你来说只是简单的事情!
    【解决方案3】:

    如果字符串总是以 GMT 结尾,那么您可以使用 ParseExact:

    var dateString = "Mon, 25 03 2013 00:00:00 GMT";
    var date = DateTime.ParseExact(dateString,
                                   "ddd, dd MM yyyy hh:mm:ss GMT", 
                                   CultureInfo.InvariantCulture);
    var result = TimeZoneInfo.ConvertTime(date, TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time"));
    

    【讨论】:

    • 我不太明白你在用CultureInfo.InvariantCulture 做什么,但是当我把它改成null 时它就消失了。甚至两者都为我抛出错误。
    • CultureInfo.InvariantCulture 用于指定不特定于任何区域的不变(不可自定义)文化。它使用英文月份和日期名称。你把Convert.ToDateTime改成DateTime.ParseExact了吗?
    • 好的,我明白了,是的,我确实改变了它
    • 那么你现在遇到了什么错误?
    猜你喜欢
    • 2017-02-27
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2016-08-07
    相关资源
    最近更新 更多