如何将.net日期转换为NSTimeInterval
本文关键字:转换 NSTimeInterval 日期 net | 更新日期: 2023-09-27 18:11:12
我们有。net代码(c#)写入SQLite数据库,然后由iOS (iPhone)应用程序用objective-c读取。
在SQLite中使用的日期格式是NSTimeInterval(到NSDate with dateWithIntervalSince1970),因为它在iPhone上是有效的。
.NET DateTime如何转换为NSTimeInterval,以便当它与dateWithIntervalSince1970提取日期是正确的?
指出:1)我试图搜索NSTimeInterval如何从根本上工作,但只找到这个不透明的文档:http://developer.apple.com/library/mac/文档/可可/引用/基金/杂项/Foundation_DataTypes/引用/reference.html
2)虽然c#代码是理想的,但我很乐意使用从3 int(年/月/日)到双精度的伪代码。我想你指的是NSTimeInterval
。NSTimeInterval
表示一段时间,以秒为单位,因此在。net中它的逻辑等价是System.TimeSpan
而不是System.DateTime
。但是,如果您将其指定为自January 1, 1970 00:00:00 GMT
以来的时间跨度,这是-timeIntervalSince1970
所得到的,那么它与System.DateTime
之间的转换就成为可能。
要在System.DateTime
和POSIX时间戳之间进行转换(在这种情况下就是NSTimeInterval
,加上亚秒精度),您可能需要这样做:
DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
DateTime dt = ...;
double intervalSince1970 = (dt - unixEpoch).TotalSeconds;
反过来:
DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
double intervalSince1970 = ...;
DateTime dt = unixEpoch + TimeSpan.FromSeconds(intervalSince1970);
这是我们的一个实用程序中的内容,希望对您有所帮助。
private static double GetUnixEpoch(this DateTime dateTime)
{
var unixTime = dateTime.ToUniversalTime() -
new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return unixTime.TotalSeconds;
}
var epochTime = DateTime.Now.GetUnixEpoch();
如果你想获得未来的日期,它也可以使用
未来30分钟
var unixTime2 = (DateTime.Now + new TimeSpan(0, 30, 0)).GetUnixEpoch();