Dateformat给出了不同的时间

问题描述 投票:1回答:2

我在字符串“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);
}
java jodatime simpledateformat
2个回答
0
投票

Count from epoch

第一个输入似乎是UTC中1970年第一时刻的纪元参考的毫秒数。

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

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

为了更灵活,例如以各种格式生成文本,请转换为OffsetDateTimeZonedDateTime

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

String as integer

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

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

如果确定已知,则分配时区或从UTC偏移。

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

Generating strings

我想把它转换成这种格式“yyyy-MM-dd HH:mm:ss”

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

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

About 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
投票

使用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找到

© www.soinside.com 2019 - 2024. All rights reserved.