C#中UnixTime和DateTime的转换(转载)
由于在API请求中返回回来的时间格式为UNIX形式,需要转换成正常的显示方式,在网上找到了这么一个例子。
使用是在C#中使用的,所以WP8开发应该也可以。
转载源地址:http://blog.linuxphp.org/?action=show&id=154
转换代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MYspace { public class UnixTime { private static DateTime BaseTime = new DateTime(1970,1,1); /// <summary> /// 将unixtime转换为.NET的DateTime /// </summary> /// <param name="timeStamp">秒数</param> /// <returns>转换后的时间</returns> public static DateTime FromUnixTime(long timeStamp) { return new DateTime((timeStamp + 8 * 60 * 60) * 10000000 + BaseTime.Ticks); } /// <summary> /// 将.NET的DateTime转换为unix time /// </summary> /// <param name="dateTime">待转换的时间</param> /// <returns>转换后的unix time</returns> public static long FromDateTime(DateTime dateTime) { return (dateTime.Ticks - BaseTime.Ticks) / 10000000 - 8 * 60 * 60; } } }
由于转载的这个版本,会因为时区的原因而受限,因此做了些改进,下面是改进版代码:
private static DateTime BaseTime = new DateTime(1970, 1, 1); /// <summary> /// 将unixtime转换为.NET的DateTime /// </summary> /// <param name="timeStamp">秒数</param> /// <returns>转换后的时间</returns> public static DateTime FromUnixTime(long timeStamp) { return TimeZone.CurrentTimeZone.ToLocalTime(new DateTime (timeStamp * 10000000 + BaseTime.Ticks)); } /// <summary> /// 将.NET的DateTime转换为unix time /// </summary> /// <param name="dateTime">待转换的时间</param> /// <returns>转换后的unix time</returns> public static long FromDateTime(DateTime dateTime) { return (TimeZone.CurrentTimeZone.ToUniversalTime(dateTime).Ticks - BaseTime.Ticks) / 10000000; }
使用TimeZone进行对时区上的处理,这样就不会再因为用户所在时区的原因导致显示时间的出错。