Android String date" 2017-09-04T07:09:30.269 + 00:00"转换为长

时间:2017-09-04 08:57:10

标签: android android-date

我以下列格式从通知服务器收到了日期字符串。 的 2017-09-04T07:09:30.269 + 00:00

我希望它转换为long以保存在数据库中。

public static long convertStringDatetoLong(final String date, final String inputFormat) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(inputFormat);
        try {
            Date outputDate = simpleDateFormat.parse(date);
            return outputDate.getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0;
    }

然后我打电话给convertStringDatetoLong(date, "yyyy-mm-dd'T'HH:mm:ss.SSSXXX"); 但我发现转换长度有点错误。

结果时间是1483513770269,这是错误的。 它应该有时像1504509270911,它以15开头...(我用currentTimeMillis得到)

2017-09-04T07:09:30.269 + 00:00 ,输入时区与我的时区不同,即GMT + 08:00

我不知道如何将其转换为设备时区并获得正确的毫秒保存时间。

更新

抱歉我做的很蠢。它应该是MM而不是mm。

2 个答案:

答案 0 :(得分:0)

您可以使用对象ZonedDateTime轻松完成此操作:

String example = "2017-09-04T07:09:30.269+00:00";
OffsetDateTime offset = OffsetDateTime.parse(example);
ZonedDateTime result = offset.atZoneSameInstant( ZoneId.systemDefault() ); // Put you wanted zone here

从那里开始,您可以使用以下代码行轻松获取时间戳:

Long timestamp = startTime.toInstant().getEpochSecond();

答案 1 :(得分:0)

试试这个,

String timeStr = "2017-09-04T07:09:30.269+00:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date Obj= null;
try {
    Obj = sdf.parse(timeStr);
} catch (ParseException e) {
    e.printStackTrace();
}

long time = Obj.getTime();
System.out.println(time);