如何将.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(年/月/日)到双精度的伪代码。

如何将.net日期转换为NSTimeInterval

我想你指的是NSTimeIntervalNSTimeInterval表示一段时间,以秒为单位,因此在。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();