【问题标题】:C#, convert string to DateTimeOffsetC#,将字符串转换为 DateTimeOffset
【发布时间】:2017-10-12 16:22:06
【问题描述】:

我正在尝试将字符串转换为 DateTimeOffset。这是我的字符串的一个示例 2017/010/23:51:50 2017 代表 010 年代表一年中的某一天,而 23:51:50 是时间。 我正在尝试以下方式,但无论输入是什么,它都会返回我0001-01-01 00:00:00.0000000 +00:00。 我的代码

DateTimeOffset DateTime;
string year = ("2017/010/23:51:50");
DateTimeOffset.TryParse(year, out DateTime);

有什么建议吗?

更新 为简单起见,我没有留下我的问题。我的日期时间我从.txt 文件的名称和日期和时间(010/23:51:50 一些有偏移,而一些内容没有)从该.txt 文件的内容中获取年份(2017 it could be 2002, 2001)。所以我的输入并不总是相同的。希望这可以澄清

【问题讨论】:

  • 当你说一年中的哪一天时,你的意思是从1到365吗?
  • 它返回了 false,永远不要忽略它。使用 Parse() 来保持诚实。
  • 你是对的@OfirWinegarten
  • 你为什么使用DateTimeOffset?日期字符串不包含偏移信息。是 UTC 吗?

标签: c# datetimeoffset tryparse


【解决方案1】:

首先将字符串用/分割,然后使用dayOfTheYear值和年份获得年/月/日。接下来拆分时间参数并使用它来获取TimeSpan并将其添加到之前获取的日期中。接下来,只需将新获得的日期解析为 DateTimeOffset。这段代码应该可以工作:

        string year = ("2017/010/23:51:50");
        var date = year.Split('/');
        var timeSpanVal = date[2].ToString().Split(':').Select(x=>Convert.ToInt32(x)).ToList();
        TimeSpan ts = new TimeSpan(timeSpanVal[0], timeSpanVal[1], timeSpanVal[2]);
        DateTime newDate = new DateTime(Convert.ToInt32(date[0]), 1, 1).AddDays(Convert.ToInt32(date[1]) - 1)+ts;

        DateTimeOffset.TryParse(newDate.ToString(), out DateTime);

【讨论】:

  • 无需通过字符串即可将DateTime 转换为DateTimeOffset。但是,您确实需要知道要使用的偏移量。
【解决方案2】:

查看date and time formats,我认为您无法解析Year/JulianDay/Time的格式。您可以做的是将字符串拆分为多个部分,然后将日期添加到年份

string[] parts = year.Split('/');
DateTime dt = new DateTime(int.Parse(parts[0]), 1, 1); 
dt = dt.AddDays(int.Parse(parts[1]) - 1).Add(TimeSpan.Parse(parts[2]));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    相关资源
    最近更新 更多