我正在尝试解析日期字符串,这是FTP服务器上文件的修改日期。以下是代码。
String dateString = mFTPClient.getModificationTime(PDF_FILE_NAME_PS);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
Date modificationDate = dateFormat.parse(dateString.substring(dateString.indexOf(" ")));
Log.v(TAG, "inside downloadservice dateString="+dateString);
Log.v(TAG, "inside downloadservice modificationdate="+modificationDate.toString());
我在日志中得到了这个
05-27 10:04:20.870: V/DownloadService(751): inside downloadservice dateString=213 20130523130035
05-27 10:04:20.890: V/DownloadService(751): inside downloadservice modificationdate=Sat Jul 23 07:30:35 AEDT 203
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
String#substring(int index)方法的javadoc说: 子字符串以指定索引处的字符开头,并延伸到此字符串的末尾。
以下是您遇到的问题:您没有正确使用String.substring()
方法,因为在调用它时,您会收到另一个String
,其中包含一个空格作为第一个字符,这是为什么解析器出错了。
以下是您需要的修复:
String dateString = mFTPClient.getModificationTime(PDF_FILE_NAME_PS);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
Date modificationDate =
dateFormat.parse(dateString.substring(dateString.indexOf(" ") + 1));
答案 1 :(得分:0)
LocalDateTime.parse(
"20130523130035" ,
DateTimeFormatter.ofPattern( "uuuuMMddHHmmss" )
).toString()
2013-05-23T13:00:35
现代方法使用 java.time 类。
您的输入缺少与UTC或时区偏移的指示。所以我们解析为LocalDateTime
。因此,不片刻,不时间轴上的特定点,但只是对时间线上约26-27小时范围内潜在时刻的想法
String input = "213 20130523130035".split( " " )[1] ; // Grab second piece of text from your input string, the 20130523130035 part.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuuMMddHHmmss" ) ;
LocalDateTime ldt = LocalDateTime.parse( input , f ) ;
ldt.toString():2013-05-23T13:00:35
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
使用符合JDBC driver或更高版本的JDBC 4.2,您可以直接与数据库交换 java.time 对象。不需要字符串也不需要java.sql。* classes。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。