Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将.NET日期转换为NSTimeInterval?_C#_Iphone_.net_Ios_Cocoa - Fatal编程技术网

C# 如何将.NET日期转换为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的基本

我们有.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。谢谢你,乔纳森。