我有这种方法接受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
新方法无需检查两种情况 - 只需输入偏移就可以了。
我已经看过这些线程,例如:
Parsing a *supposed* Unix date time (with timezone info) to DateTime object
我也试过: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时间减去它的逻辑是正确的方法吗?