使用时区偏移将DateTime解析为Unix

时间:2014-03-10 16:06:40

标签: c# date unix datetime

我有这种方法接受2014-03-10T08:00:00之类的字符串并将其转换为如下的unix编号:1394456400

以下是所述方法:

public string convertToUnix(string dateString)
{
    string format;
    DateTime result;
    CultureInfo provider = CultureInfo.InvariantCulture;

    format = "yyyy-MM-dd'T'HH:mm:ss";

    result = DateTime.ParseExact(dateString, format, provider);
    return (result - new DateTime(1970, 1, 1).ToLocalTime()).TotalSeconds.ToString();
}

我的format变量是那些没有时区偏移的DateTimes的条件。

我的代码完全符合上述格式,但我有兴趣转换具有偏移量的时区,例如:

2014-03-10T08:00:00-07:00

新方法无需检查两种情况 - 只需输入偏移就可以了。

我已经看过这些线程,例如:

  1. Parsing a *supposed* Unix date time (with timezone info) to DateTime object

  2. Parsing Datetime with timezone offsets

  3. 我也试过:format = "yyyy-MM-dd'T'HH:mm:ss-HH:mm";作为我的条件,但我不认为这是有效的,因为它需要增加或减少偏移量。

    编辑:

    关于自我实验和Jon对使用DateTimeOffset的评论,我想出了这个:

    public static double convertToUnix2(string dateString)
    {
        var dateTimeOffset = DateTimeOffset.Parse(dateString, null);
        return (dateTimeOffset - new DateTime(1970, 1, 1)).TotalSeconds;
    }
    

    2014-03-10T08:00:00-07:00的输入上,输出1394445600

    我也有这表明解析成功了:

    public static string convertToUnix3(string dateString)
    {
        var dateTimeOffset = DateTimeOffset.Parse(dateString, null);
        return dateTimeOffset.ToString();
    }
    

    输入2014-03-10T08:00:00-07:00并输出3/10/2014 8:00:00 AM -07:00

    获取DateTime对象并从Epoch时间减去它的逻辑是正确的方法吗?

0 个答案:

没有答案