【问题标题】:parsing a date string from FTPClient.getModificationTime()从 FTPClient.getModificationTime() 解析日期字符串
【发布时间】:2013-05-21 19:42:42
【问题描述】:

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

谁能帮我解决这个问题?

【问题讨论】:

  • 为了清楚起见,您是否遇到从 dateString 解析的 modificationdate 值不正确的问题?
  • 是的,解析的日期应该是 2013 年 5 月 23 日,我得到的是 203 年 7 月 23 日。

标签: java android ftp-client date-parsing


【解决方案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));

【讨论】:

  • 仅供参考,java.util.Date、java.util.Calendar 和 java.text.SimpleDateFormat 等麻烦的旧日期时间类现在已被 java.time 类所取代。许多 java.time 功能在ThreeTen-Backport 项目中被反向移植到Java 6 和Java 7。在ThreeTenABP 项目中进一步适用于早期的Android。见How to use ThreeTenABP…。
【解决方案2】:

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.Date、Calendar 和 SimpleDateFormat。

Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

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

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

从哪里获得 java.time 类?

ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval、YearWeek、YearQuarter 和more。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    相关资源
    最近更新 更多