C# 如何将.NET日期转换为NSTimeInterval?
我们有.NET代码(C#)写入SQLite数据库,然后由带有objective-C的iOS(iPhone)应用程序读取 SQLite中使用的日期格式是NSTimeInterval(到NSDate with dateWithIntervalSince1970),因为它在iPhone上非常有效 如何将.NET DateTime转换为NSTimeInterval,以便在使用dateWithIntervalSince1970提取时,日期是正确的? 注: 1) 我试图搜索NSTimeInterval的基本工作原理,但只找到以下不透明文档:C# 如何将.NET日期转换为NSTimeInterval?,c#,iphone,.net,ios,cocoa,C#,Iphone,.net,Ios,Cocoa,我们有.NET代码(C#)写入SQLite数据库,然后由带有objective-C的iOS(iPhone)应用程序读取 SQLite中使用的日期格式是NSTimeInterval(到NSDate with dateWithIntervalSince1970),因为它在iPhone上非常有效 如何将.NET DateTime转换为NSTimeInterval,以便在使用dateWithIntervalSince1970提取时,日期是正确的? 注: 1) 我试图搜索NSTimeInterval的基本
2) 虽然C#code是理想的但我很乐意使用从3整数(年/月/日)到双精度的伪代码。我想你的意思是
NSTimeInterval
NSTimeInterval
表示时间跨度(以秒为单位),因此其在.NET中的逻辑等价物是System.TimeSpan
,而不是System.DateTime
。但是,如果您将其指定为自1970年1月1日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();
是的,我的意思是从.NET日期到NSInterval,你的答案是正确的。我只是把它做成了一个扩展方法,它以DateTime作为输入,并返回一个对1970的双引用。Thank-public static double ToNSIntervalSince1970(this DateTime dt){DateTime unixEpoch=new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc);double intervalSince1970=(dt-unixEpoch).TotalSeconds;return intervalSince1970;}
NSTimeInterval
,而不是NSInterval
。现在我看到盲人说:)。问题已更新,以参考NSTimeInterval。谢谢你,乔纳森。