首页 新闻 会员 周边 捐助

C# 时间时区转换

0
悬赏园豆:10 [已解决问题] 解决于 2014-12-27 14:43

前提:

服务器在北美,用户在澳洲,c# sql 写入时间用的是 datetime.now ,读取的时候怎么把时间转换为 当地时间?

 

比如我从服务器取出的时间是这样的:2014-12-04 11:59:51

 

展现给用户要是这样的:2014-12-04 15:00:00

 

由于截图先后顺序问题,澳洲那边的时间现在应该是和国内时间 分钟 是一样的。

请问大侠,C# 内,时区转换怎么写(算上夏时令和冬时令)?

西安-DB的主页 西安-DB | 初学一级 | 园豆:4
提问于:2014-12-04 12:02
< >
分享
最佳答案
1

你先转换成UTC时间,然后再用utc时间转换成当地时间。

DateTime st = DateTime.UtcNow;
Console.WriteLine(st.ToLocalTime());

你可以试一下!

收获园豆:4
Mr.Brian | 小虾三级 |园豆:1518 | 2014-12-04 12:13
其他回答(2)
0

TimeZone timeZoneLondon = TimeZone.getTimeZone("North America / America");//北美
Calendar cal=Calendar.getInstance(timeZoneLondon);
cal.set(2014,12,4);//2014-12-04
TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai");//澳洲
cal.setTimeZone(timeZone);

收获园豆:3
徐武峰 | 园豆:207 (菜鸟二级) | 2014-12-04 12:26
0

如果有这种需求,请在写入时使用int型存储。( 1413230086802类似这样的时间,这样才能无视时区的概念

收获园豆:3
幻天芒 | 园豆:37205 (高人七级) | 2014-12-04 12:34

麻烦多说一点

支持(0) 反对(0) 西安-DB | 园豆:4 (初学一级) | 2014-12-04 12:42

@西安-DB: 任何时间格式都是double或者int类型的,他的意思是把时间数据用int来存储,取出来的时候再根据int转换成时间格式。

支持(0) 反对(0) Mr.Brian | 园豆:1518 (小虾三级) | 2014-12-04 12:51

@Mr.Brian: 自己尝试一下吗!

支持(0) 反对(0) Mr.Brian | 园豆:1518 (小虾三级) | 2014-12-04 12:53

@西安-DB: 数据库存储的时候,一般是把时区信息吃掉,导致了你最后在多时区情况下取值不正确,如果换成不含时区的方式存储,那么只需要最后使用时,按照特定时区进行转换即可。

// Java:
long t = System.currentTimeMillis();
System.out.println("long = " + t);

// current time zone:
SimpleDateFormat sdf_default = new SimpleDateFormat("yyyy-MM-dd HH:mm");
System.out.println(sdf_default.format(t));

// +8:00 time zone:
SimpleDateFormat sdf_8 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
sdf_8.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
System.out.println("GMT+8:00 = " + sdf_8.format(t));

// +7:00 time zone:
SimpleDateFormat sdf_7 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
sdf_7.setTimeZone(TimeZone.getTimeZone("GMT+7:00"));
System.out.println("GMT+7:00 = " + sdf_7.format(t));

// -9:00 time zone:
SimpleDateFormat sdf_la = new SimpleDateFormat("yyyy-MM-dd HH:mm");
sdf_la.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
System.out.println("America/Los_Angeles = " + sdf_la.format(t));
支持(0) 反对(0) 幻天芒 | 园豆:37205 (高人七级) | 2014-12-04 13:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册