前提:
服务器在北美,用户在澳洲,c# sql 写入时间用的是 datetime.now ,读取的时候怎么把时间转换为 当地时间?
比如我从服务器取出的时间是这样的:2014-12-04 11:59:51
展现给用户要是这样的:2014-12-04 15:00:00
由于截图先后顺序问题,澳洲那边的时间现在应该是和国内时间 分钟 是一样的。
请问大侠,C# 内,时区转换怎么写(算上夏时令和冬时令)?
你先转换成UTC时间,然后再用utc时间转换成当地时间。
DateTime st = DateTime.UtcNow;
Console.WriteLine(st.ToLocalTime());
你可以试一下!
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);
如果有这种需求,请在写入时使用int型存储。( 1413230086802类似这样的时间,这样才能无视时区的概念
)
麻烦多说一点
@西安-DB: 任何时间格式都是double或者int类型的,他的意思是把时间数据用int来存储,取出来的时候再根据int转换成时间格式。
@Mr.Brian: 自己尝试一下吗!
@西安-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));