String date = jsonobject.getString("needbydate");
DateFormat df = new SimpleDateFormat("MMM/dd/yyyy");
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ssZ");
Date startDate = sdf.parse(date);
String needbydate = df.format(startDate).toString()+"";
date
= 2014-12-17T21:37:00+00:00
needbydate
= 2014年12月18日
17
更改为18
....我在转换中做错了什么
String date=jsonobject.getString("needbydate");
DateFormat df = new SimpleDateFormat("MMM/dd/yyyy",Locale.ENGLISH);
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss",Locale.ENGLISH);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date startDate;
startDate = sdf.parse(date);
needbydate = df.format(startDate).toString()+"";
答案 0 :(得分:6)
您的日期格式使用的是系统默认时区。这对你的输入没问题,因为它明确指定了UTC偏移 - 但对于你的输出,你只是得到了一个日期。因此,它会显示您系统时区中该时间点的日期。
您需要考虑您想要的时区 - 以及是否受输入中非零偏移的影响。您可以使用DateFormat.setTimeZone
设置输出时使用的时区。 (例如,2014-12-17T21:37:00-05:00应该显示为12月18日(UTC)还是12月17日(源时区)?)
您还应该使用输入格式中的HH
而不是hh
,因为它显然是24小时值,而不是12小时值。
答案 1 :(得分:1)
String date=jsonobject.getString("needbydate");
DateFormat df = new SimpleDateFormat("MMM/dd/yyyy",Locale.ENGLISH);
df.setTimeZone(TimeZone.getTimeZone("UTC"));
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss",Locale.ENGLISH);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date startDate;
startDate = sdf.parse(date);
needbydate = df.format(startDate).toString();
答案 2 :(得分:1)
Joda-Time确实容易得多。 Joda-Time默认处理标准ISO 8601格式字符串。
当输入字符串包含偏移量(在这种情况下为+00:00
)时,相应地解析字符串的其余部分。当同时传递时区对象时,Joda-Time会将解析后的值调整为该区域。有关演示,请参阅下面的代码示例。
请注意加尔各答印度的调整意味着日期从17日到18日结束。
String input = "2014-12-17T21:37:00+00:00";
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime dateTimeMontréal = new DateTime( input , zone ); // Parse as UTC because of "+00:00" offset, then adjust to desired time zone of Montréal.
轻松调整到其他时区。
DateTime dateTimeParis = dateTimeMontréal.withZone( DateTimeZone.forID( "Europe/Paris" ) );
DateTime dateTimeUtc = dateTimeMontréal.withZone( DateTimeZone.UTC );
DateTime dateTimeKolkata = dateTimeMontréal.withZone( DateTimeZone.forID( "Asia/Kolkata" ) );
转储到控制台。
System.out.println( "input: " + input );
System.out.println( "dateTimeMontréal: " + dateTimeMontréal );
System.out.println( "dateTimeParis: " + dateTimeParis );
System.out.println( "dateTimeUtc: " + dateTimeUtc );
System.out.println( "dateTimeKolkata: " + dateTimeKolkata );
跑步时。
input: 2014-12-17T21:37:00+00:00
dateTimeMontréal: 2014-12-17T16:37:00.000-05:00
dateTimeParis: 2014-12-17T22:37:00.000+01:00
dateTimeUtc: 2014-12-17T21:37:00.000Z
dateTimeKolkata: 2014-12-18T03:07:00.000+05:30