我在字符串“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);
}
答案 0 :(得分:0)
第一个输入似乎是从UTC 1970年第一时刻的纪元参考开始算起的毫秒数。
使用Integer.parseLong
将字符串解析为long
。
long count = Long.parseLong( "1416490009109" ) ;
Instant instant = Instant.ofEpochMilli( count ) ;
要获得更大的灵活性(例如生成各种格式的文本),请转换为OffsetDateTime
或ZonedDateTime
。
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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
目前位于Joda-Time的maintenance mode项目建议迁移到java.time类。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
在哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如Interval
,YearWeek
,YearQuarter
和more。
答案 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