datetimeconverter.cs

来自「AJAX开发工具包」· CS 代码 · 共 71 行

CS
71
字号
using System;

namespace AjaxPro
{
	/// <summary>
	/// Provides methods to serialize and deserialize a DateTime object.
	/// </summary>
	public class DateTimeConverter : IJavaScriptConverter
	{
		public DateTimeConverter() : base()
		{
		}

		public override object Deserialize(IJavaScriptObject o, Type t)
		{
			if(!(o is JavaScriptObject))
				throw new NotSupportedException();

			JavaScriptObject ht = (JavaScriptObject)o;

			int Year = (int)JavaScriptDeserializer.Deserialize(ht["Year"].ToString(), typeof(int));
			int Month = (int)JavaScriptDeserializer.Deserialize(ht["Month"].ToString(), typeof(int));
			int Day = (int)JavaScriptDeserializer.Deserialize(ht["Day"].ToString(), typeof(int));
			int Hour = (int)JavaScriptDeserializer.Deserialize(ht["Hour"].ToString(), typeof(int));
			int Minute = (int)JavaScriptDeserializer.Deserialize(ht["Minute"].ToString(), typeof(int));
			int Second = (int)JavaScriptDeserializer.Deserialize(ht["Second"].ToString(), typeof(int));
			int Millisecond = (int)JavaScriptDeserializer.Deserialize(ht["Millisecond"].ToString(), typeof(int));

			DateTime d = new DateTime(Year, Month, Day, Hour, Minute, Second, Millisecond);

			d = d.AddMinutes(TimeZone.CurrentTimeZone.GetUtcOffset(d).TotalMinutes);

			return d;
		}

		public override string Serialize(object o)
		{
			if(!(o is DateTime))
				throw new NotSupportedException();
			
			DateTime dt = Convert.ToDateTime(o);
			dt = dt.ToUniversalTime();

			return String.Format("new Date(Date.UTC({0},{1},{2},{3},{4},{5},{6}))",
				dt.Year,
				dt.Month -1,
				dt.Day,
				dt.Hour,
				dt.Minute,
				dt.Second,
				dt.Millisecond);
		}

		public override Type[] SerializableTypes
		{
			get
			{
				return new Type[]{typeof(DateTime)};
			}
		}

		public override Type[] DeserializableTypes
		{
			get
			{
				return new Type[]{typeof(DateTime)};
			}
		}
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?