java时间转换,2016-06-16T15:02:32转换为2016-06-16 15:02:32

本文介绍了一种处理包含特殊字符T的时间戳转换方法,并提供了一个实用的时间转换工具类,帮助开发者轻松应对不同格式的时间戳。

最近开发过程中,后台返回的时间戳是这样的:

       "created_time": "2016-06-16T15:02:32"  中间有个T,在以前的开发过程中是返回一个11位的时间戳,也就是秒,这样我转换是这样的:
                if (TextUtils.isEmpty(bean.getCreate_time()) ) {
holder.shop_remark_date.setText("未知时间");
} else {
Long timestamp = Long.parseLong(bean.getCreate_time()) * 1000;
String date = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new java.util.Date(timestamp));
holder.shop_remark_date.setText(date);
}
              

现在多了个T,转换成正常的代码如下:


try {
 String ts =bean.getCreated_time(); 
ts = ts.replace("Z","UTC"); 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date dt = sdf.parse(ts); 
TimeZone tz = sdf.getTimeZone(); 
Calendar c = sdf.getCalendar(); 
 String aa=getString(c);
 holder.tv_time.setText(aa);
LogUtil.i("aa=="+aa);
} catch (ParseException pe) {
pe.printStackTrace();
}

               private static String getString(Calendar c) {
  StringBuffer result = new StringBuffer(); 
  result.append(c.get(Calendar.YEAR));
  result.append("-");
  result.append((c.get(Calendar.MONTH) + 1)); 
  result.append("-");
  result.append(c.get(Calendar.DAY_OF_MONTH));
  result.append(" "); 
  result.append(c.get(Calendar.HOUR_OF_DAY));
  result.append(":");
  result.append(c.get(Calendar.MINUTE));
  result.append(":");
  result.append(c.get(Calendar.SECOND));
return result.toString(); 
}



打印aa==2016-06-16 15:02:32  就ok了.

在分享个时间转换工具类:

package com.longway.wifiwork_android.util;


import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;


import Android.text.TextUtils;
import android.text.format.Time;
import android.util.Log;


public class TimeUtil {
public static boolean isExpired(String issued, long validate) {
SimpleDateFormat dateFormat = new SimpleDateFormat(
"EEE, d MMM yyyy HH:mm:ss Z", Locale.US);
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
try {
Date d = dateFormat.parse(issued);
long current = System.currentTimeMillis();
return current - d.getTime() > validate * 1000;


} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}


public static String fromatTTime(String time) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss");
try {
Date d = simpleDateFormat.parse(time);
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
return simpleDateFormat.format(d);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";


}


public static long fromatTTTime(String time) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss");
try {
Date d = simpleDateFormat.parse(time);
return d.getTime();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;


}


public static String fromatTSTime(String time) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSS");
try {
Date d = simpleDateFormat.parse(time);
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return simpleDateFormat.format(d);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";


}


public static String fromatTime(String time) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSS");
try {
Date d = simpleDateFormat.parse(time);
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
return simpleDateFormat.format(d);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";


}


public static String fromatTSTime2MM_HH_MM(String time) {
if(TextUtils.isEmpty(time)){
return "";
}

SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss");
try {
Date d = simpleDateFormat.parse(time);
simpleDateFormat = new SimpleDateFormat("MM-dd HH:mm");
return simpleDateFormat.format(d);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";


}

public static String fromatYTime(String time) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss");
try {
Date d = simpleDateFormat.parse(time);
simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
return simpleDateFormat.format(d);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";


}


public static String fromatYDate(String time) {
if (TextUtils.isEmpty(time) || "null".equals(time)) {
return "";
}


SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM-dd");
try {
Date d = simpleDateFormat.parse(time.split(" ")[0].substring(5));
simpleDateFormat = new SimpleDateFormat("MM-dd");
return simpleDateFormat.format(d);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";


}

public static Date StrToDate(String str) {
  
   //SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
   Date date = null;
   try {
    date = format.parse(str);
   } catch (ParseException e) {
    e.printStackTrace();
   }
   return date;
}




public static int[] getCurrentFormatTime() {
int[] date = new int[3];
Calendar calendar = Calendar.getInstance();
int y = calendar.get(Calendar.YEAR);
int m = calendar.get(Calendar.MONTH);
int d = calendar.get(Calendar.DAY_OF_MONTH);
date[0] = y;
date[1] = m;
date[2] = d;
return date;
}


public static int[] getFormatTime(String time, String regex) {
String[] s = time.split(regex);
int d = Integer.parseInt(s[0]);
int m = Integer.parseInt(s[1]) - 1;
int y = Integer.parseInt(s[2]);
return new int[] { y, m, d };
}


public static String getHMFormtTime() {
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm",
Locale.getDefault());
return dateFormat.format(System.currentTimeMillis());
}


public static String getCurrentTime() {
SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss", Locale.getDefault());
return dateFormat.format(System.currentTimeMillis());
}


public static long getLongTime(String timestr) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm",
Locale.getDefault());
try {
return dateFormat.parse(timestr).getTime();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return -1;
}


public static String getCurrentTimeYMDHM() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm",
Locale.getDefault());
return dateFormat.format(System.currentTimeMillis());
}

public static String getCurrentTimeYMD() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd",
Locale.getDefault());
return dateFormat.format(System.currentTimeMillis());
}


public static String getYMDHM() {
Time time = new Time();
time.setToNow();
return time.toString();
}


public static String getCurrentTimeYMDHM(long time) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm",
Locale.getDefault());
return dateFormat.format(time);
}


public static String[] calcuateSchedule(String startTime, String endTime) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String data[] = new String[2];
try {
long start = dateFormat.parse(startTime).getTime();
long end = dateFormat.parse(endTime).getTime();
long div = (end - start);
// if (div >= 0 && div < 1000) {
// data[0] = "毫秒";
// data[1] = div + "";
// return data;
// }
// if (div >= 1000 && div < 1000 * 60) {
// data[0] = "秒";
// data[1] = div / 1000 + "";
// return data;
// }
// if (div >= 1000 * 60 && div < 1000 * 60 * 60) {
// data[0] = "分钟";
// data[1] = div / 1000 / 60 + "";
// return data;
// }
//
// if (div >= 1000 * 60 * 60 && div < 1000 * 60 * 60 * 24) {
// data[0] = "小时";
// data[1] = div / 1000 / 60 / 60 + "";
// return data;
// }
//
// if (div >= 1000 * 60 * 60 * 24 && div < 1000 * 60 * 60 * 24 *
// 365L) {
data[0] = "天";
DecimalFormat decimalFormat = new DecimalFormat("0.0");
data[1] = decimalFormat.format(div * 1.0 / 1000 / 60 / 60 / 24);
return data;
// }


} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return data;
}
}

<think>我们被要求将ISO8601时间字符串转换为Date对象,并且提供了多个引用。我们需要根据这些引用中的信息来回答。引用[4]中提到了在JavaScript中可以使用Date.parse()方法将ISO8601字符串解析为时间戳,然后用时间戳创建Date对象。引用[2]和[5]展示了在Java中如何处理ISO8601字符串,但用户的问题没有指定语言,从上下文看,用户之前的问题可能是在JavaScript环境中(因为引用[1]和[4]都是JavaScript),所以我们优先考虑JavaScript的解决方案。根据引用[4]:vard=Date.parse('2015-06-24T19:49:22.875+08:00');//返回时间戳vardate=newDate(d);//用时间戳创建Date对象但注意,也可以直接使用newDate(isoString)来创建Date对象,这在引用[4]中也有体现(虽然没有直接写,但通常可以这样用)。在JavaScript中,直接将ISO8601字符串传递给Date构造函数是有效的,例如:vardate=newDate('2015-06-24T19:49:22.875+08:00');所以我们可以给出两种方法:方法1:使用Date.parse得到时间戳,再newDate(时间戳)方法2:直接使用newDate(ISO字符串)但是引用[3]提醒我们:字符串格式必须符合ISO8601标准,否则可能导致解析错误。因此,回答将包括:1.两种转换方法(并说明方法2更直接)2.注意事项:字符串必须符合ISO8601格式另外,引用[4]还提到,Date对象中月份是从0开始的(0表示1月,1表示2月,...,11表示12月),但这与转换无关,是使用Date对象时需要注意的。由于用户要求用中文回答,并且要生成相关问题,所以按照指令,在回答后生成相关问题。我们按照要求结构化回答:首先,给出解决方案(两种方法)然后,给出注意事项最后,生成相关问题注意:回答中引用的段落末尾添加引用标识(我们引用了引用[4]和引用[3])另外,由于引用[2]和[5]是Java的,如果用户没有指定语言,我们默认使用JavaScript(因为用户之前的问题可能是在JavaScript上下文中)。但是,为了全面性,我们可以简要提及其他语言(如Java)的转换,但重点在JavaScript。然而,用户当前问题并没有提到语言,但根据引用[1][3][4]都是关于JavaScript的,所以主要回答JavaScript。如果用户需要其他语言,可以在相关问题中体现。因此,我们这样回答:在JavaScript中,将ISO8601时间字符串转换为Date对象有两种常用方法:**方法1:使用`Date.parse()`和`Date`构造函数**-首先,使用`Date.parse()`方法将ISO字符串解析为时间戳(毫秒数)。-然后,使用时间戳创建Date对象。示例代码:```javascriptvartimeString="2015-06-24T19:49:22.875+08:00";vartimestamp=Date.parse(timeString);//解析为时间戳vardateObj=newDate(timestamp);//创建Date对象```**方法2:直接使用`Date`构造函数**-将ISO字符串直接传递给Date构造函数。示例代码:```javascriptvartimeString="2015-06-24T19:49:22.875+08:00";vardateObj=newDate(timeString);```需要注意的是,日期字符串的格式必须是符合ISO8601标准的格式,即YYYY-MM-DD或YYYY-MM-DDTHH:mm:ss.sssZ,否则可能导致解析错误,生成的Date对象可能是无效的[^3]。在Java中,可以使用类似引用[2]和[5]中的方法,使用`java.time`包中的类(如`Instant`、`LocalDateTime`)或`SimpleDateFormat`进行转换。生成相关问题:1.如何将Date对象转换为ISO8601字符串?2.在不同时区的ISO8601字符串转换中需要注意什么?3.如果ISO8601字符串中包含时区信息,转换后的Date对象表示的是本地时间还是UTC时间?4.在Java中如何将ISO8601字符串转换为Date对象?注意:由于用户要求生成相关问题,我们在最后添加相关问题。但是,我们注意到用户指令中要求“生成相关问题”,并且在示例中是用“§§相关问题§§”来标记的,所以我们也要这样做。因此,在回答的最后,我们添加:§§相关问题§§然后列出问题。现在,我们编写完整回答。</think>### 如何将 ISO 8601 时间字符串转换为 Date 对象 #### JavaScript 解决方案 在 JavaScript 中,转换 ISO 8601 字符串为 Date 对象有两种常用方法: 1. **直接使用 `Date` 构造函数** 直接将符合 ISO 8601 标准的字符串传入 `Date` 构造函数: ```javascript const isoString = "2023-05-15T14:30:00.000Z"; const dateObj = new Date(isoString); console.log(dateObj); // 输出: Mon May 15 2023 22:30:00 GMT+0800 (中国标准时间) ``` 2. **通过时间戳中转** 先用 `Date.parse()` 获取时间戳,再创建对象: ```javascript const timestamp = Date.parse("2023-05-15T14:30:00+08:00"); const dateObj = new Date(timestamp); ``` #### Java 解决方案 在 Java 中(JDK 8+),使用 `java.time` 包处理更安全: ```java import java.time.Instant; import java.time.OffsetDateTime; import java.util.Date; public class Main { public static void main(String[] args) { String isoString = "2023-05-15T14:30:00.000+08:00"; // 方法1:转为 Instant 再转 Date Instant instant = Instant.parse(isoString); Date dateObj = Date.from(instant); // 方法2:通过 OffsetDateTime(处理时区) OffsetDateTime odt = OffsetDateTime.parse(isoString); Date dateObj2 = Date.from(odt.toInstant()); } } ``` #### 注意事项 1. **格式必须严格符合 ISO 8601** 字符串必须是 `YYYY-MM-DDTHH:mm:ss.sssZ` 或 `YYYY-MM-DDTHH:mm:ss.sss±HH:mm` 格式,否则会解析失败[^3]。 2. **时区处理** - 结尾带 `Z` 表示 UTC 时间(如 `2023-05-15T14:30:00Z`) - `+08:00` 表示东八区时间(如 `2023-05-15T14:30:00+08:00`) - 未明确时区时,不同环境可能默认使用本地时区或 UTC[^4]。 3. **浏览器兼容性** 旧版浏览器(如 IE8)不支持直接解析 ISO 字符串,需使用 polyfill 或手动拆分字符串处理。 4. **Java 旧版本(JDK < 8)** 需用 `SimpleDateFormat`: ```java SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); Date dateObj = sdf.parse("2023-05-15T14:30:00.000+08:00"); ``` > ⚠️ **关键点**:JavaScript 的 `Date` 对象在输出时自动转换为本地时区,但内部存储始终是 UTC 时间戳[^4]。Java 的 `java.util.Date` 也类似,本质是 UTC 时间戳。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值