2017-09-04 100 views
-3

我以下列格式从通知服务器收到日期字符串。 2017-09-04T07:09:30.269 + 00:00Android字符串日期“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

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

更新时间:

遗憾的是我在做愚蠢的事。它应该是毫米而不是毫米。

回答

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(); 
+0

这需要的API 26.我需要支持低级别API> 16 –

+0

那好吧,这不是令状十个地方,所以我期望使用高API水平。 – Nico

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); 
相关问题