Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在分析FTPClient.getModificationTime()中的日期字符串_Java_Android_Ftp Client_Date Parsing - Fatal编程技术网

Java 正在分析FTPClient.getModificationTime()中的日期字符串

Java 正在分析FTPClient.getModificationTime()中的日期字符串,java,android,ftp-client,date-parsing,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

我试图解析一个日期字符串,它是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
有人能帮我吗?

该方法的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));
tl;博士 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 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

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

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类
    • 对于早期的Android,该项目采用了ThreeTen Backport(如上所述)。看

该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可能会在这里找到一些有用的类,例如、、和。

只是想澄清一下,您是否对从
dateString
解析的
modificationdate
的值有问题?是的,解析的日期应该是2013年5月23日,我得到的是203年7月23日。仅供参考,诸如
java.util.date
java.util.Calendar
java.text.SimpleDateFormat
等麻烦的旧日期时间类现在是遗留的,被这些类所取代。大部分java.time功能都在项目中向后移植到Java6和Java7。进一步适应项目中早期的Android。看见
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 ) ;