项目上使用了apache commons net包,发现获取服务器上的文件的时间比真实时间少了8个小时,debug了一下午,原以为是时区的问题,但是最终发现似乎源码是有问题的。
主要是FTPTimestampParserImpl.java的parseTimestamp方法,代码如下:
/**
* Implements the one {@link FTPTimestampParser#parseTimestamp(String) method}
* in the {@link FTPTimestampParser FTPTimestampParser} interface
* according to this algorithm:
*
* If the recentDateFormat member has been defined, try to parse the
* supplied string with that. If that parse fails, or if the recentDateFormat
* member has not been defined, attempt to parse with the defaultDateFormat
* member. If that fails, throw a ParseException.
*
* This method allows a {@link Calendar} instance to be passed in which represents the
* current (system) time.
*
* @see org.apache.commons.net.ftp.parser.FTPTimestampParser#parseTimestamp(java.lang.String)
*
* @param timestampStr The timestamp to be parsed
*/
public Calendar parseTimestamp(String timestampStr) throws ParseException {
Calendar now = Calendar.getInstance();
return parseTimestamp(timestampStr, now);
}
这个方法的参数是一个时间字符串,是从服务器上返回的(类似于我们通过终端连接服务器 执行“ls -l”命令 看到的时间部分,只有年月时分)。方法的第一行,按照注释上的意思是服务器时间,但是实际上代码是在本地执行,获取的一定是本地时间,问题似乎就出现在这里,紧接着第二行调用了另外一个方法,代码如下:
public Calendar parseTimestamp(String timestampStr, Calendar serverTime) throws ParseException {
// 方法体就省略了,从参数名就可以看出来 第二个参数应该是服务器时间
}
注释太多,就不贴出来了,从参数名就可以看出来 第二个参数应该是服务器时间。
分享到:
相关推荐
1. FTP支持:Apache Commons Net 3.0提供了全面的FTP客户端实现,允许开发者进行文件上传、下载、目录浏览、文件重命名等操作。它支持FTP和FTPS(FTP over SSL/TLS)协议,确保数据传输的安全性。FTPClient类是主要...
在创建一个基于Apache Commons FileUpload的文件上传组件时,通常会包含以下步骤: 1. 创建`DiskFileItemFactory`实例。 2. 使用工厂创建`ServletFileUpload`实例,设置大小限制。 3. 解析`HttpServletRequest`对象...
Apache Commons HttpClient 是一个Java库,专门用于执行HTTP和HTTPS请求,包括远程文件的下载。这个库为开发者提供了高级HTTP客户端功能,比如支持多种HTTP方法(GET、POST等)、处理Cookies、管理连接池以及进行...
1. 添加依赖:在项目中引入Apache Commons IO和FileUpload的JAR文件,或者在Maven或Gradle项目中添加对应的依赖。 2. 创建Servlet或控制器:设置请求的解析器,例如在Servlet中使用`ServletFileUpload`类。 3. ...
总的来说,Apache Commons Net是一个强大的网络编程工具集,无论是在处理FTP文件传输,还是进行远程服务器交互,或是发送邮件,都能提供便捷的API。在选择使用哪个版本时,应根据项目需求和已知的bug列表来决定,...
Apache Commons Net的FTPClient支持被动模式,通过设置passiveMode(),客户端能在服务器指定的端口上建立数据连接,解决此类网络问题。 五、源码解析 深入学习`commons-net-3.6.jar`的源码,可以帮助开发者理解FTP...
标题“org.apache.commons.fileupload 文件上传至数据库”指的是使用Apache Commons FileUpload库将用户上传的文件存储到数据库中的技术。Apache Commons FileUpload是Apache软件基金会的一个开源项目,它提供了一个...
Apache Commons Net库是Java开发人员在处理各种网络协议时常用的一个工具包,其中包括对FTP(文件传输协议)的全面支持。在3.3版本中,`org.apache.commons.net.ftp.FTPClient`类是实现FTP通信的核心组件。这个类...
- `saveFile` 方法读取 `FileItem` 中的输入流,将其写入服务器上的文件。 三、关键知识点 1. **DiskFileItemFactory**:这是处理文件上传的基础,它负责在内存或磁盘上存储临时文件,并允许设置内存阈值,超过该...
Apache Commons Net 是一个广泛使用的 Java 库,它提供了多种网络协议的实现,其中包括 FTP(文件传输协议)的支持。在这个PDF文档中,作者分享了如何利用 Apache Commons Net 实现Java FTP上传的功能,特别是针对...
### Apache Jakarta Commons 使用手册知识点详解 #### 一、概述 《Apache Jakarta Commons 使用手册》是一部详细介绍Apache Jakarta Commons项目下的各种Java组件的专业书籍。该书由Will Iverson编写,旨在为...
3. **FTPFile**: 该类代表FTP服务器上的一个文件或目录,提供了获取文件名、大小、修改时间等属性的方法。 4. **FTPListParseEngine**: 这个类用于解析FTP服务器返回的目录列表,通常这些列表是以不同的格式返回的...
### 获取FTP服务器文件大小的知识点解析 在进行网络文件传输时,经常需要了解远程文件的大小,以便于更好地控制文件的下载进度或者进行其他相关的管理操作。本文将围绕“获取FTP服务器文件的大小”这一主题展开,...
`org.apache.commons.fileupload.DiskFileUpload` 是 Apache Commons FileUpload 模块中的一个类,主要用于处理 HTTP 请求中的文件上传。这个类实现了基于磁盘的文件上传存储策略,当上传文件大小超过内存阈值时,它...
在使用Apache Commons HttpClient 3.1时,我们通常会遇到的文件有: - `commons-httpclient-3.1.jar`:这是HttpClient的主要库文件,包含了所有必要的类和方法。 - `RELEASE_NOTES.txt`:记录了该版本的发布说明,...
首先,需要在页面中添加表单代码,例如:()%>/servlet/SimpleUpload" enctype="multipart/form-data" method="post">然后,在服务器端使用 Apache Commons FileUpload 组件解析上传的文件数据。 四、FileUpload组件...
例如,开发者可以先使用FileUpload解析出上传的文件,然后利用Commons IO将其保存到服务器的指定位置。 这两个库的源代码文件(sources)也一同提供,这对于学习和理解其内部实现机制非常有帮助。通过阅读源码,...
Apache Commons 工具类介绍及简单使用 Apache Commons 是一个开源的 Java 库,提供了许多实用的工具类,帮助开发者快速构建 Java 应用程序。本文将对 Apache Commons 工具类进行介绍,并提供简单的使用示例。 ...