从DateTime转换?到NSDate [英] Convert from DateTime? to NSDate
本文介绍了从DateTime转换?到NSDate的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在将DateTime转换为NSDate 中,提出了以下扩展方法:
public static DateTime NSDateToDateTime(此 NSDate日期)
{
DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime(
new DateTime( 2001 , 1 , 1 , 0 , 0 , 0 ));
return reference.AddSeconds(date.SecondsSinceReferenceDate);
}
public static NSDate DateTimeToNSDate(此 DateTime日期)
{
DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime(
new DateTime( 2001 , 1 , 1 , 0 , 0 , 0 )) ;
return NSDate.FromTimeIntervalSinceReferenceDate(
(date - reference).TotalSeconds);
}
如何在转换时使用可空的DateTime?
编辑:
现在我有以下
public static DateTime? NSDateToDateTime(此 NSDate日期)
{
if (date == null ){
return null ;
} else {
DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime( new DateTime ( 2001 , 1 , 1 ,< span class =code-digit> 0 , 0 , 0 ));
return (DateTime?)reference.AddSeconds(date.SecondsSinceReferenceDate);
}
}
public static NSDate DateTimeToNSDate (此 Nullable< DateTime> date)
{
if (date == null ){
return null ;
} else {
DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime( new DateTime ( 2001 , 1 , 1 ,< span class =code-digit> 0 , 0 , 0 ));
return NSDate.FromTimeIntervalSinceReferenceDate((date.GetValueOrDefault() - reference).TotalSeconds);
}
}
public static NSDate DateTimeToNSDate (此 DateTime日期)
{
DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime(
new DateTime( 2001 , 1 , 1 , 0 , 0 , 0 ));
return NSDate.FromTimeIntervalSinceReferenceDate((date - reference).TotalSeconds);
}
以下是我的测试用例:
// 测试用例1:从NSDate转换为DateTime?
// NSDate testDate = NSDate.Now;
// DateTime? newDate = testDate.NSDateToDateTime();
// Console.WriteLine(newDate.ToString( ));
// 结果:工作
// 测试用例2:从null NSDate转换为DateTime?
// NSDate testDate = null;
// DateTime? newDate = testDate.NSDateToDateTime();
// Console.WriteLine(newDate.ToString( ));
// 结果:没有
// 测试用例3:从DateTime转换?到NSDate
// DateTime? testDate = new DateTime? (DateTime.Now);
// NSDate newDate = testDate.DateTimeToNSDate();
// Console.WriteLine(newDate.ToString());
// 结果:工作
// 测试用例4:从null DateTime转换?到NSDate
// DateTime? testDate = null;
// NSDate newDate = testDate.DateTimeToNSDate();
// Console.WriteLine(newDate.ToString());
// result:crash因为无法在null上调用ToString()
// 测试用例5:从DateTime转换为NSDate
// DateTime testDate = DateTime.Now;
// NSDate newDate = testDate.DateTimeToNSDate();
// Console.WriteLine(newDate.ToString());
// 结果:作品
< span class =code-comment> // 测试用例6:从NSDate转换为DateTime
// NSDate testDate = NSDate.Now;
// DateTime newDate = testDate.NSDateToDateTime();
// Console.WriteLine(newDate.ToString());
// result:doesn'因为需要显式转换(DateTime newDate = testDate.NSDateToDateTime()。GetValueOrDefault();)
解决方案
看来你需要总共编写4个方法 - 每个转换方向2个 - 我们需要为每个类型编写一个扩展方法(可以为空且不可为空)和你不能用一种方法将它们联合起来给出这里:
http://stackoverflow.com/questions/742336/extension-method-on-type-and-nullabletype [ ^ ]
public static DateTime? NSDateToDateTime(此 NSDate日期)
{
if (date == null ){
return null ;
} else {
DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime( new DateTime ( 2001 , 1 , 1 ,< span class =code-digit> 0 , 0 , 0 ));
return (DateTime?)reference.AddSeconds(date.SecondsSinceReferenceDate);
}
}
public static NSDate DateTimeToNSDate (此 Nullable< datetime>日期)
{
if (date == null ){
return null ;
} else {
return (date.GetValueOrDefault())。DateTimeToNSDate( );
}
}
public static NSDate DateTimeToNSDate (此 DateTime日期)
{
DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime(
new DateTime( 2001 , 1 , 1 , 0 , 0 , 0 ));
return NSDate.FromTimeIntervalSinceReferenceDate(
(date - reference).TotalSeconds);
} < / datetime > < /跨度>
In Converting DateTime to NSDate the following extension methods are proposed:
public static DateTime NSDateToDateTime(this NSDate date)
{
DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime(
new DateTime(2001, 1, 1, 0, 0, 0) );
return reference.AddSeconds(date.SecondsSinceReferenceDate);
}
public static NSDate DateTimeToNSDate(this DateTime date)
{
DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime(
new DateTime(2001, 1, 1, 0, 0, 0) );
return NSDate.FromTimeIntervalSinceReferenceDate(
(date - reference).TotalSeconds);
}
How can I use nullable DateTime with that conversion?
Edit:
Now I have the following
public static DateTime? NSDateToDateTime(this NSDate date)
{
if (date == null) {
return null;
} else {
DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime (new DateTime (2001, 1, 1, 0, 0, 0));
return (DateTime?)reference.AddSeconds (date.SecondsSinceReferenceDate);
}
}
public static NSDate DateTimeToNSDate(this Nullable<DateTime> date)
{
if (date == null) {
return null;
} else {
DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime (new DateTime (2001, 1, 1, 0, 0, 0));
return NSDate.FromTimeIntervalSinceReferenceDate ((date.GetValueOrDefault() - reference).TotalSeconds);
}
}
public static NSDate DateTimeToNSDate(this DateTime date)
{
DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime(
new DateTime(2001, 1, 1, 0, 0, 0) );
return NSDate.FromTimeIntervalSinceReferenceDate((date - reference).TotalSeconds);
}
Here are my test cases:
// Testcase 1: Converting from NSDate to DateTime?
// NSDate testDate = NSDate.Now;
// DateTime? newDate = testDate.NSDateToDateTime();
// Console.WriteLine (newDate.ToString ());
// result: works
// Testcase 2: Converting from null NSDate to DateTime?
// NSDate testDate = null;
// DateTime? newDate = testDate.NSDateToDateTime();
// Console.WriteLine (newDate.ToString ());
// result: nothing
// Testcase 3: Converting from DateTime? to NSDate
// DateTime? testDate = new DateTime? (DateTime.Now);
// NSDate newDate = testDate.DateTimeToNSDate ();
// Console.WriteLine (newDate.ToString ());
// result: works
// Testcase 4: Converting from null DateTime? to NSDate
// DateTime? testDate = null;
// NSDate newDate = testDate.DateTimeToNSDate ();
// Console.WriteLine (newDate.ToString ());
// result: crash because ToString() can't be called on null
// Testcase 5: Converting from DateTime to NSDate
// DateTime testDate = DateTime.Now;
// NSDate newDate = testDate.DateTimeToNSDate ();
// Console.WriteLine (newDate.ToString ());
// result: works
// Testcase 6: Converting from NSDate to DateTime
// NSDate testDate = NSDate.Now;
// DateTime newDate = testDate.NSDateToDateTime();
// Console.WriteLine (newDate.ToString ());
// result: doesn't work because explicit conversion is needed (DateTime newDate = testDate.NSDateToDateTime().GetValueOrDefault();)
解决方案
It seems you need to write total 4 methods - 2 for each direction of conversion - we need to write an extension method for each type (nullable and not nullable) and you cannot club them in one method as given here:
http://stackoverflow.com/questions/742336/extension-method-on-type-and-nullabletype[^]
public static DateTime? NSDateToDateTime(this NSDate date) { if (date == null) { return null; } else { DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime (new DateTime (2001, 1, 1, 0, 0, 0)); return (DateTime?)reference.AddSeconds (date.SecondsSinceReferenceDate); } } public static NSDate DateTimeToNSDate(this Nullable<datetime> date) { if (date == null) { return null; } else { return (date.GetValueOrDefault ()).DateTimeToNSDate (); } } public static NSDate DateTimeToNSDate(this DateTime date) { DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime( new DateTime(2001, 1, 1, 0, 0, 0) ); return NSDate.FromTimeIntervalSinceReferenceDate( (date - reference).TotalSeconds); }</datetime>
这篇关于从DateTime转换?到NSDate的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文