我们有.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个整数(年/月/日)变为双重。
答案 0 :(得分:4)
我认为你的意思是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);
答案 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();