从DateTime转换?到NSDate [英] Convert from DateTime? to NSDate

查看:90
本文介绍了从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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆