Android Date To Milles(ISO 8601)

时间:2012-07-03 15:23:30

标签: android android-widget

正在研究倒计时小部件。问题解释如下

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

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

为什么会这样? 。使用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();

2 个答案:

答案 0 :(得分: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();
        }

答案 1 :(得分: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();

另一方面,您似乎遇到的问题与时区有关。当您从millis转换回日期字符串时,它将使用本地时区进行转换。如果您希望将日期作为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返回。