如何将.NET日期转换为NSTimeInterval?

时间:2011-10-12 01:24:46

标签: c# iphone .net ios cocoa

我们有.NET代码(C#)写入SQLite数据库,然后由具有objective-c的iOS(iPhone)应用程序读取。

SQLite中使用的日期格式是NSTimeInterval(对于带有dateWithIntervalSince1970的NSDate),因为它在iPhone上有效。

如何将.NET DateTime转换为NSTimeInterval,以便在使用dateWithIntervalSince1970提取日期时是正确的?

注意: 1)我试图从根本上搜索NSTimeInterval如何工作,但只找到这个不透明的文档: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html

2)虽然C#代码是理想的我会对伪代码感到满意,伪代码从3个整数(年/月/日)变为双重。

2 个答案:

答案 0 :(得分:4)

我认为你的意思是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);

答案 1 :(得分:0)

这是我们在其中一个工具中所希望它有所帮助。

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();