0

am working on countdown widget .The problem is explained below

'2012-07-04T15:00:00Z' - >  '1341414000000'

 '1341414000000' - > indicate 2012 july 4th 20:30 

why this happend? . Am using joda

final String format = "yyyy-MM-dd'T'HH:mm:ssZ";

DateTimeFormatter formatter = DateTimeFormat.forPattern(format);
            DateTime endTime = formatter.parseDateTime(strDate);
                long diff=endTime.getMillis();
4

2 回答 2

0
String time="2012-07-04T15:00:00Z";
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
        df.setTimeZone(TimeZone.getTimeZone("UTC"));
      //  time.replace("Z","");
        try {
            Date date=df.parse(time);
            long diff=date.getTime()-System.currentTimeMillis();
            System.out.println("Date "+diff);
        } catch (ParseException e) {

            e.printStackTrace();
        }
于 2012-07-03T18:17:43.497 回答
0

这似乎是一个老问题,但无论如何我都会回答,因为其他人可能会发现这个。

在 Joda 中有一个用于 ISO 8601 格式的类,因此您可以使用该类而不是手动指定格式,如下所示:

import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;
import org.joda.time.DateTime;

String strDate = "2012-07-04T15:00:00Z";

DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis();
DateTime endTime = formatter.parseDateTime(strDate);
long diff=endTime.getMillis();

另一方面,您似乎遇到的问题与时区有关。当您从毫秒转换回日期字符串时,它会使用本地时区进行转换。如果您想以 UTC 格式获取日期,您应该执行以下操作:

import org.joda.time.DateTimeZone;
import org.joda.time.DateTime;

DateTime dt = new DateTime(1341414000000).withZone(DateTimeZone.UTC);

它将按预期返回 2012-07-04T15:00:00.000Z。如果要在没有毫秒的情况下对其进行格式化,可以使用与以前相同的格式化程序:

import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;
import org.joda.time.DateTime;

DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis();
DateTime dt = new DateTime(1341414000000).withZone(DateTimeZone.UTC);
formatter.print(dt)

它将返回 2012-07-04T15:00:00Z。

于 2013-08-21T02:50:59.373 回答