从FTPClient.getModificationTime()解析日期字符串

时间:2013-05-27 00:14:17

标签: java android ftp-client date-parsing

我正在尝试解析日期字符串,这是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

有人可以帮我解决这个问题吗?

2 个答案:

答案 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)

TL;博士

LocalDateTime.parse(
    "20130523130035" ,
    DateTimeFormatter.ofPattern( "uuuuMMddHHmmss" )
).toString()
  

2013-05-23T13:00:35

java.time

现代方法使用 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.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance 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的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore