繁体   English   中英

C#将字符串“yyyy-MM-dd hh:mm:ss 'UTC'”转换为日期时间

[英]C# Convert a string "yyyy-MM-dd hh:mm:ss 'UTC'" to date time

我有一个字符串,例如: "2022-04-17 14:46:31 UTC"

我想将其转换为日期时间,但出现以下错误:

字符串 '2022-04-17 14:46:31 UTC' 未被识别为有效的 DateTime。从索引 '20' 开始有一个未知单词。”

请注意,我已经尝试过:

var date =  DateTime.Parse("2022-04-17 14:46:31 UTC");

DateTime dt;
DateTime.TryParseExact("2022-04-17 14:46:31 UTC", 
                       "yyyy-MM-dd hh:mm:ss 'UTC'", 
                       CultureInfo.InvariantCulture, DateTimeStyles.None, out dt)

有两件事要做:

  1. 如评论中所述:将HH用于 24 小时格式
  2. 将结果调整为实际的 UTC 时间
DateTime.TryParseExact("2022-04-17 14:46:31 UTC", "yyyy-MM-dd HH:mm:ss 'UTC'", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);
DateTime utc = new DateTime(dt.Ticks,  DateTimeKind.Utc);

根据这个答案,您需要将时区名称转换为时移。

因此,首先我们需要将时区名称表获取到时区偏移。 从这里复制并转换为字典。

完整的算法是:

  1. 查找时区名称
  2. 在字典中找到它
  3. 用班次替换时区名称
  4. 解析日期字符串

var dateString = "2022-04-17 14:46:31 UTC";
var lastWhiteSpace = dateString.LastIndexOf(' ');
var timeZoneName = dateString.Substring(lastWhiteSpace+1);
var correctDate = dateString.Replace(timeZoneName, TimeZoneToShift[timeZoneName]);
var date = DateTime.ParseExact(correctDate, "yyyy-MM-dd HH:mm:ss zzz", null);

public static Dictionary<string, string> TimeZoneToShift = new Dictionary<string, string>()
{
    {"ACDT", "-10:30"},
    {"ACST", "-09:30"},
    {"ADT", "+03:00"},
    {"AEDT", "-11:00"},
    {"AEST", "-10:00"},
    {"AHDT", "+09:00"},
    {"AHST", "+10:00"},
    {"AST", "+04:00"},
    {"AT", "+02:00"},
    {"AWDT", "-09:00"},
    {"AWST", "-08:00"},
    {"BAT", "-03:00"},
    {"BDST", "-02:00"},
    {"BET", "+11:00"},
    {"BST", "+03:00"},
    {"BT", "-03:00"},
    {"BZT2", "+03:00"},
    {"CADT", "-10:30"},
    {"CAST", "-09:30"},
    {"CAT", "+10:00"},
    {"CCT", "-08:00"},
    {"CDT", "+05:00"},
    {"CED", "-02:00"},
    {"CET", "-01:00"},
    {"CST", "+06:00"},
    {"EAST", "-10:00"},
    {"EDT", "+04:00"},
    {"EED", "-03:00"},
    {"EET", "-02:00"},
    {"EEST", "-03:00"},
    {"EST", "+05:00"},
    {"FST", "-02:00"},
    {"FWT", "-01:00"},
    {"GMT", "+00:00"},
    {"GST", "-10:00"},
    {"HDT", "+09:00"},
    {"HST", "+10:00"},
    {"IDLE", "-12:00"},
    {"IDLW", "+12:00"},
    {"IST", "-05:30"},
    {"IT", "-03:30"},
    {"JST", "-09:00"},
    {"JT", "-07:00"},
    {"MDT", "+06:00"},
    {"MED", "-02:00"},
    {"MET", "-01:00"},
    {"MEST", "-02:00"},
    {"MEWT", "-01:00"},
    {"MST", "+07:00"},
    {"MT", "-08:00"},
    {"NDT", "+02:30"},
    {"NFT", "+03:30"},
    {"NT", "+11:00"},
    {"NST", "-06:30"},
    {"NZ", "-11:00"},
    {"NZST", "-12:00"},
    {"NZDT", "-13:00"},
    {"NZT", "-12:00"},
    {"PDT", "+07:00"},
    {"PST", "+08:00"},
    {"ROK", "-09:00"},
    {"SAD", "-10:00"},
    {"SAST", "-09:00"},
    {"SAT", "-09:00"},
    {"SDT", "-10:00"},
    {"SST", "-02:00"},
    {"SWT", "-01:00"},
    {"USZ3", "-04:00"},
    {"USZ4", "-05:00"},
    {"USZ5", "-06:00"},
    {"USZ6", "-07:00"},
    {"UT", "+00:00"},
    {"UTC", "+00:00"},
    {"UZ10", "-11:00"},
    {"WAT", "+01:00"},
    {"WET", "+00:00"},
    {"WST", "-08:00"},
    {"YDT", "+08:00"},
    {"YST", "+09:00"},
    {"ZP4", "-04:00"},
    {"ZP5", "-05:00"},
    {"ZP6", "-06:00"},
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM