格林威治时间与北京时间的相互转换,后台服务器是格林威治的时间没有处理就丢给我了,
解决吧,网上一搜,发现这个问题在10年,甚至08年就有人提出来并解决了,向前人致敬,
用到了,把有用的总结一下:
》1 08年有个哥们解决的方式是截取字符串转换格式:
String ts = "2007-10-23T17:15:44.000Z";
System.out.println("ts = " + ts);
ts = ts.replace("Z", " UTC");
System.out.println("ts = " + ts);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd‘T‘HH:mm:ss.SSS Z");
Date dt = sdf.parse(ts);
TimeZone tz = sdf.getTimeZone();
Calendar c = sdf.getCalendar();
System.out.println("Display name: " + tz.getDisplayName());
System.out.println(getString(c));
见:http://devsharp.iteye.com/blog/170001
》2改时区:
public String paserTime(int time){
System.setProperty("user.timezone", "Asia/Shanghai");
TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");
TimeZone.setDefault(tz);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String times = format.format(new Date(time * 1000L));
System.out.print("日期格式---->" + times);
return times;
}
见:http://blog.csdn.net/xiaanming/article/details/8558547
》3设置到闰年,时分秒等
见 :http://blog.sina.com.cn/s/blog_7fdd5eb901013iep.html
传六位参数,截取判断。
》4 终于找到工具类了
Date nowTime = new Date(); // 要转换的时间
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(nowTime.getTime());
Log.i("OTH","北京时间:" + cal.getTime().toString().substring(0, 19));
cal.add(Calendar.HOUR, -8);
Log.i("OTH","格林威治时间:" + cal.getTime());
》5 有没有封装还好一点的呢?
package com.example.mydemo2012;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
class GTMDateUtil {
/**
* GTM转本地时间
*
* @param GTMDate
* @return
*/
@SuppressWarnings("unused")
public String GTMToLocal(String GTMDate) {
int tIndex = GTMDate.indexOf("T");
String dateTemp = GTMDate.substring(0, tIndex);
String timeTemp = GTMDate.substring(tIndex + 1, GTMDate.length() - 6);
String convertString = dateTemp + " " + timeTemp;
SimpleDateFormat format;
format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);
Date result_date;
long result_time = 0;
if (null == GTMDate) {
return GTMDate;
} else {
try {
format.setTimeZone(TimeZone.getTimeZone("GMT00:00"));
result_date = format.parse(convertString);
result_time = result_date.getTime();
format.setTimeZone(TimeZone.getDefault());
return format.format(result_time);
} catch (Exception e) {
e.printStackTrace();
}
}
return GTMDate;
}
/***
* 转成格林威治时间 感觉用不到
*/
public String LocalToGTM(String LocalDate) {
SimpleDateFormat format;
format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);
Date result_date;
long result_time = 0;
if (null == LocalDate) {
return LocalDate;
} else {
try {
format.setTimeZone(TimeZone.getDefault());
result_date = format.parse(LocalDate);
result_time = result_date.getTime();
format.setTimeZone(TimeZone.getTimeZone("GMT00:00"));
return format.format(result_time);
} catch (Exception e) {
e.printStackTrace();
}
}
return LocalDate;
}
}
very good!
见:http://blog.csdn.net/sun6223508/article/details/45189841
>获取时间大全,格式转换+闰年。。。。++,
见:http://www.oschina.net/code/snippet_575610_22694
整理好了,下载地址:
http://download.csdn.net/detail/onebelowzero2012/9374733
欢迎补充,另外c写的 获取格林威治时间的exe文件也打包了。