跨时间区域显示相应区域时间的解决办法
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));
}
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));
}
相关文章推荐
- dedecms问答模块时间显示1970-01-01的解决办法
- 电脑开机自检时间过长并显示DHCP.../的解决办法
- DeveloperExpress 中时间控件TcxDateEdit星期显示错误的解决办法
- MyEclipse时间显示0时区时间的解决办法
- aspx页面运行纯js脚本的时间控件不能显示控件的解决办法
- Win10任务栏通知区域时间不显示无法看到当前时间的解决方法
- 从自定义view中传值到activity,用textview显示,自定义view就不能刷新了。大半天时间了,求解决办法
- PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
- PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
- Win7电脑通知区域时间显示消失的解决方法
- 关于mschart的X轴时间显示问题,时间始终是从0到24小时排序,不是零点分界,错误解决办法
- ArcGIS 中使用 zoomToEnvelope 不能完整显示区域问题的解决办法
- 织梦(dedecms)自定义表单,“时间类型”字段显示为数字的解决办法
- 无线连接提示"检测到无线网络"但打开无线列表显示"区域中找不到无线网络" 解决办法
- Win7任务栏时间不显示几月几日的解决办法
- bootstrap时间控件显示在模态框下面的解决办法
- eclipse+SVN文件只显示版本号,不显示时间和作者解决办法
- OpenERP 安装在Windows server上时间显示不对的解决办法
- EasyUI Datetimebox 日期时间框 无论选中哪天的日期最后显示的都是当前日期 解决办法
- Windows没有北京时间(GMT+8时区)的问题,及QQ聊天栏中显示的时间错误的问题解决办法