将 ISO8601 T-Z 格式的字符串转换为日期

2022-09-03 00:45:05

可能的解决方案:将Java日期转换为另一个时间作为日期格式

我经历了它,但没有得到我的答案。

我有一个字符串“2013-07-17T03:58:00.000Z”,我想将其转换为我们在制作新Date()时获得的相同形式的日期。Date d=new Date();

时间应该在IST区 - 亚洲/加尔各答

因此,上面字符串的日期应为

星期三 七月 17 12:05:16 IST 2013 //任何时间根据印度标准 GMT+0530

String s="2013-07-17T03:58:00.000Z";
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
TimeZone tx=TimeZone.getTimeZone("Asia/Kolkata");
formatter.setTimeZone(tx);
d= (Date)formatter.parse(s);

答案 1

对时区使用日历。

TimeZone tz = TimeZone.getTimeZone("Asia/Calcutta");
Calendar cal = Calendar.getInstance(tz);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
sdf.setCalendar(cal);
cal.setTime(sdf.parse("2013-07-17T03:58:00.000Z"));
Date date = cal.getTime();

然而,对于这个,我会推荐Joda Time,因为它在这种情况下有更好的功能。对于JodaTime,你可以做这样的事情:

DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
DateTime dt = dtf.parseDateTime("2013-07-17T03:58:00.000Z");
Date date = dt.toDate();

答案 2

日期没有任何时区。如果您想知道日期在印度时区中的字符串表示形式,请使用另一个SimpleDateFormat,其时区设置为印度标准,并使用此新的SimpleDateFormat格式化日期。

编辑:代码示例:

String s = "2013-07-17T03:58:00.000Z";
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
Date d = formatter.parse(s);

System.out.println("Formatted Date in current time zone = " + formatter.format(d));

TimeZone tx=TimeZone.getTimeZone("Asia/Calcutta");
formatter.setTimeZone(tx);
System.out.println("Formatted date in IST = " + formatter.format(d));

输出(当前时区为巴黎 - GMT+2):

Formatted Date in current time zone = 2013-07-17T05:58:00.000+02
Formatted date in IST = 2013-07-17T09:28:00.000+05