您的位置:首页 > 其它

跨时间区域显示相应区域时间的解决办法

2007-11-18 16:20 477 查看
最近项目中遇到了一个问题,就是公司的一些电子商务站点的服务器在不同的国家,因此时间区域也不相同,但是后台管理显示订单的时间都要一致,这就需要解决时间区域的问题。经过网上的搜索,发现了一个很不错的讨论关于这个话题。

http://topic.csdn.net/t/20021215/13/1262367.html

该帖子中有以为作者提供了一个时间转换的结构体:




using System;





public struct LostinetTimeZone




...{


private TimeSpan ts;


public LostinetTimeZone(TimeSpan offsetHour)




...{


ts = offsetHour;


}




public TimeSpan GetUtcOffset()




...{


return ts;


}






public DateTime ToLocalTime(DateTime dtUTC)




...{


return dtUTC + ts;


}


public DateTime ToUniversalTime(DateTime dtLocale)




...{


return dtLocale - ts;


}


public DateTime TransformFrom(DateTime dtAntherTimeZone, LostinetTimeZone antherTimeZone)




...{


return ToLocalTime(antherTimeZone.ToUniversalTime(dtAntherTimeZone));


}




public string ToString(DateTime dt)




...{


//dt=dt.ToUniversalTime();//和下面是一样的.


dt = dt - TimeZone.CurrentTimeZone.GetUtcOffset(dt) + ts;


return dt.ToString();


}




//other methods...




public static LostinetTimeZone UTC




...{




get ...{ return new LostinetTimeZone(TimeSpan.FromHours(+0)); }


}


public static LostinetTimeZone UK




...{




get ...{ return new LostinetTimeZone(TimeSpan.FromHours(+0)); }


}


public static LostinetTimeZone CN




...{




get ...{ return new LostinetTimeZone(TimeSpan.FromHours(+8)); }


}


public static LostinetTimeZone US




...{




get ...{ return new LostinetTimeZone(TimeSpan.FromHours(-5)); }


}


//other timezones...


}


class App




...{


[STAThread]


static void Main(string[] args)




...{


DateTime dt = DateTime.Now;




Console.WriteLine("ToUniversalTime :" + dt.ToUniversalTime().ToString());


Console.WriteLine("中国 :" + LostinetTimeZone.CN.ToString(dt));


Console.WriteLine("英国 :" + LostinetTimeZone.UK.ToString(dt));


Console.WriteLine("美国 :" + LostinetTimeZone.US.ToString(dt));




Console.WriteLine();




//DateTime|TimeZone.ToUniversalTime 是个骗局:


Console.WriteLine(TimeZone.CurrentTimeZone.GetUtcOffset(dt).TotalHours);


Console.WriteLine(TimeZone.CurrentTimeZone.GetUtcOffset(dt.ToUniversalTime()).TotalHours);




Console.WriteLine();




//美国时间,上面已经显示了


string 美国时间 = LostinetTimeZone.US.ToString(dt);


DateTime dtUSA = DateTime.Parse(美国时间);




//从美国转换过来?




//1:


//DateTime dtUTC=LostinetTimeZone.美国.ToUniversalTime(dtUSA);


//DateTime dtCN=LostinetTimeZone.中国.ToLocalTime(dtUTC);




//2:


DateTime dtCN = LostinetTimeZone.CN.TransformFrom(dtUSA, LostinetTimeZone.US);




Console.WriteLine("美国时间:{0} = 中国时间:{1}", dtUSA.ToString("yyyy-MM-dd HH-mm-ss"), dtCN.ToString("yyyy-MM-dd HH-mm-ss"));


}


}



这个代码是可以运行与FORM程序中,我稍微修改了一些,修改成了一个类,这样就更方便使用了。




public class LostinetTimeZone




...{


TimeSpan ts;


public LostinetTimeZone(TimeSpan offsetHour)




...{


ts = offsetHour;


}




public TimeSpan GetUtcOffset()




...{


return ts;


}




public DateTime ToLocalTime(DateTime dtUTC)




...{


return dtUTC + ts;


}


public DateTime ToUniversalTime(DateTime dtLocale)




...{


return dtLocale - ts;


}


public DateTime TransformFrom(DateTime dtAntherTimeZone, LostinetTimeZone antherTimeZone)




...{


return ToLocalTime(antherTimeZone.ToUniversalTime(dtAntherTimeZone));


}




public string ToString(DateTime dt)




...{


//dt=dt.ToUniversalTime();//和下面是一样的.


dt = dt - TimeZone.CurrentTimeZone.GetUtcOffset(dt) + ts;


return dt.ToString();


}




public static LostinetTimeZone UTC




...{




get ...{ return new LostinetTimeZone(TimeSpan.FromHours(+0)); }


}


public static LostinetTimeZone UK




...{




get ...{ return new LostinetTimeZone(TimeSpan.FromHours(+0)); }


}


public static LostinetTimeZone CN




...{




get ...{ return new LostinetTimeZone(TimeSpan.FromHours(+8)); }


}


public static LostinetTimeZone US




...{




get ...{ return new LostinetTimeZone(TimeSpan.FromHours(-5)); }


}




}





在前端页面使用的时候像这样就可以了:




protected void Page_Load(object sender, EventArgs e)




...{


DateTime MyTime = DateTime.Now;


Response.Write("UTC时间:"+MyTime.ToUniversalTime().ToString()+"</br>");


Response.Write("本地时间:"+LostinetTimeZone.CN.ToString(MyTime)+"</br>");


Response.Write("美国时间:" + LostinetTimeZone.US.ToString(MyTime));


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐