java:将日历字符串转换为格式化日期

时间:2014-10-14 16:03:05

标签: java

拜托,我的代码有问题,我有一个方法可以给我一个日历,但它是一个字符串:

lastModif = sftpChannel.lstat(remoteFile).getMtimeString();

输出为String:

示例:

System.out.println(lastModif); || output is ==>  Tue Oct 14 12:48:15 WEST 2014

我想格式化这个字符串只有这个outpu:2014-10-14。

我不知道如何转换这个字符串" 10月14日12:48:15 2014年西部"到目前为止。

在此转换后,我将比较两个日期。

谢谢

3 个答案:

答案 0 :(得分:0)

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");      
Date date = new Date();     // Or any other date.

System.out.println(sdf.format(date));

输出将为2014-10-14

答案 1 :(得分:0)

你可以使用几个SimpleDateFormat s - 一个来解析你得到的字符串,还有一个来重新格式化它:

String lastModif = sftpChannel.lstat(remoteFile).getMtimeString();
DateFormat parser = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzzz yyyy");
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

System.out.println(formatter.format(parser.parse(lastModif)));

答案 2 :(得分:0)

根据Javadoc,getMtimeString()返回修改时间的字符串表示,getMTime()返回自1970年1月1日(纪元)以来的秒数,int

Java通常将日期作为要解析的字符串,或者自纪元以来的long毫秒数,或者在java.time.LocalDate的情况下,它可能需要花费的天数时代。

由于getMTime()返回自纪元以来的秒数,并且每天有86400秒,因此您只需使用它而不是getMtimeString()并从中创建LocalDate

import static java.time.format.DateTimeFormatter.ISO_LOCAL_DATE;

import java.time.LocalDate;

public class DaysToDate {
    public static void main(String[] args) {
        // ... whatever you need to do to get sftpChannel ...
        int lastModif = sftpChannel.lstat(remoteFile).getMTime();
        long days = lastModif / 86400L;
        LocalDate date = LocalDate.ofEpochDay(days);

        System.out.println(date.format(ISO_LOCAL_DATE));
        System.out.println(date);
    }
}

我使用DateTimeFormatter格式化日期(您指定的格式为ISO_LOCAL_TIME的预定义格式化程序),但这与LocalDate的默认格式相同,所以你可以调用它的toString()方法。如果您想以不同的格式对其进行格式化,只需创建一个具有所需格式的DateTimeFormatter

注意:由于getMTime()表示自1970年1月1日以来的秒数为32位int,因此它会受到2038 problem的影响。