我有一个MySql数据库,它存储我插入的每个记录的时间戳。我将该时间戳作为字符串添加到我的Android应用程序中。我的数据库位于具有CST TimeZone的服务器上。我想将该CST时间戳转换为Android设备的本地时间。
有人可以帮忙吗?
答案 0 :(得分:7)
getTimeZone.getDefault
public static synchronized TimeZone getDefault()
获取默认时区。返回 默认时区。
因为你知道CST是格林威治标准时间-6:00,并且你得到一个当地时区,说用户是+9:00(日本),你知道将你的MySQL数据库时间调整+15小时( 9 - ( - 6))。或者如果他们在迈阿密(EST,-5),你可以通过增加一小时(-5 - ( - 6))进行调整。如果在俄勒冈州波特兰市(PST -8),您将减去2小时(-8 - ( - 6))。
所以你真的需要获得当地时区偏移量并将其输入基本公式:TimeZone.getDefault + 6
,你就会知道要向本地数据库添加或减去什么。 (+6因为 - ( - 6)总是达到+6)。
如果我知道编写Java的第一件事,我会采取额外的步骤并编写一些示例代码,但是,我只对脚本足够聪明。
我已经说过我不知道如何做Java或面向对象的任何事情,对吧?
这是一个粗略的尝试,只是围绕Android文档。任何细则或简单的“甚至不接近”的评论都欢迎。请记住,我已经从快速搜索中找到了正确的方法和类,我想出了一个简单的等式,用于将时区偏移量转换为CST,所以我不是笨蛋,只是没有人知道什么时候可以独自离开。无论如何,粗暴的尝试:
System now = System.currentTimeMillis (); //Gets current local time in ms
TimeZone local_tz = TimeZone.getDefault(); //Gets current local TZ of phone
tz_offset_gmt = local_tz.getOffset(now)/3600000; // Get Offset in ms, divide by 3600000
tz_offset_cst = tz_offset_gmt + 6; // add offset to 6 to get current TZ offset to CST.
在java中如何做到这一点?
答案 1 :(得分:3)
假设您在CST中有一个日期字符串,使用时区CST解析它,然后使用Android上的默认时区对其进行格式化。
String s = "2011-01-01 12:00:00";
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("CST"));
Date timestamp = null;
try {
timestamp = df.parse(s);
df.setTimeZone(TimeZone.getDefault());
System.out.println(df.format(timestamp));
} catch (ParseException e) {
e.printStackTrace();
}
答案 2 :(得分:2)
你不能简单地用simpleDateFormat转换日期吗? 然后你只需定义你的传入日期的结构(df)并将其转换为你想要的形式(df):
private static DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
private static DateFormat df2 = new SimpleDateFormat("dd/MM/yyyy 'at' HH:mm");
public void setyourDate(String yourDate) {
Date date2;
yourDate = getyourDate() + "" + yourDate;
try {
date2 = df.parse(yourDate);
yourDate = df2.format(date2);
} catch (ParseException e) {
}
this.yourDate = yourDate;
}
有意义吗?
答案 3 :(得分:2)
这是一个老问题,但我想写下我的答案。假设您从SQL获得的时间戳类似于以下格式:yyyy-MM-dd'T'HH:mm:ss
public static Date convertStringToDate(String strDate) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("CST"));
return sdf.parse(strDate);
}