Dateformat给出了不同的时间

时间:2014-11-21 05:50:56

标签: java jodatime simpledateformat

我在字符串“yyyy-MM-dd't'HH:mm:ss.SSSZ”中有两种日期格式,第二种是长“yyyyMMddHHmmssSSS” 。 我想把它转换成这种格式“yyyy-MM-dd HH:mm:ss”,它的转换成功,但是当我打印date.getTime()而不是

首先 - >的 1416490009109

代表第二名 - >的 20141120121211800

代码:

private DateTimeFormatter formater,formater1;
private SimpleDateFormat formate,formate1,formate2;

String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
String pattern1 = "yyyy-MM-dd HH:mm:ssZ";
//String pattern = "yyyy-MM-dd HH:mm:ss";
formate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
formate1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
formate2 = new SimpleDateFormat("yyyyMMddHHmmssSSS");
formater = DateTimeFormat.forPattern(pattern);
formater1 = DateTimeFormat.forPattern(pattern1);

String dateTime = "2011-11-20'T'11:42:12.672+00:00";
long savePoint = 20141120114212672L;

try {
    datetime = formater.parseDateTime(dateTime);
    date = datetime.toDate();
    //Log.d("Android: ", "Date  formate: "+datetime);
    dt = formate.format(date.getTime());
    Log.d("Android: ", "date Keys1:   "+date.getTime());
} catch (Exception e) {
    Log.d("Android: ", "Error: "+e);
}

第二个

try {
    String[] tzone = dateTime.split("[+]");
    String times = formate1.format(Long.parseLong(savePoint));
    datetime = formater.parseDateTime(times+"+"+tzone[tzone.length-1]);
    date = datetime.toDate();
    dt = formate.format(date.getTime());
} catch (Exception e) {
    Log.d("Android:", "Error:  "+e);
}

2 个答案:

答案 0 :(得分:0)

从纪元开始计数

第一个输入似乎是从UTC 1970年第一时刻的纪元参考开始算起的毫秒数。

使用Integer.parseLong将字符串解析为long

long count = Long.parseLong( "1416490009109" ) ;
Instant instant = Instant.ofEpochMilli( count ) ; 

要获得更大的灵活性(例如生成各种格式的文本),请转换为OffsetDateTimeZonedDateTime

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) :

字符串为整数

您的第二个输入似乎是一串年,月,日,小时,分钟,秒,小数秒的字符串,伪装成一个长整数。

String input = "20141120121211800" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuuMMddHHmmssSSS" ) ;
LocalDateTime ldt = LocalDateTime.parse( input , f ) ;

确定时区或从UTC偏移。

OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC ) ;

生成字符串

  

我想将其转换为“ yyyy-MM-dd HH:mm:ss”这种格式

要使用所需的格式从日期时间对象生成文本,请使用DateTimeFormatter类。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ) ;
String output = odt.format( f ) ;

关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

目前位于Joda-Timemaintenance mode项目建议迁移到java.time类。

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

在哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

答案 1 :(得分:-1)

使用DateFormat转换日期。这可以帮到你!

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date convertedDate = dateFormat.parse(stringDate);

如果您想在以后使用

比较日期
date1.after(date2)

date1.before(date2)

有关日期的更多信息,请参阅https://docs.oracle.com/javase/7/docs/api/java/util/Date.html