-4

我正在尝试将这种格式的日期:“Fri Mar 1, 2013 4:30 PM” 转换为这种格式的时间戳值: yyyy-mm-dd hh:mm:ss

例子:

String str = 'Fri Mar 1, 2013 4:30 PM'应该输出:"2013-01-14 23:59:59"

这是我尝试过的:

String string = "January 2, 2010";
Date date = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(string); 
System.out.println(date);

这输出:Sat Jan 02 00:00:00 GMT+05:30 2010

提前致谢

4

3 回答 3

3

假设您将日期和时间作为日期。所以,你需要SimpleDateFormatterformat的方法。探索 API 中的更多模式。

public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS");
        Date currDate = new Date();
        System.out.println("Current Date: " + currDate);
        System.out.println("Formatted Date: " + sdf.format(currDate));
}

输出:

Current Date: Wed Feb 06 13:15:19 IST 2013
Formatted Date: 2013-02-06 13:15:750

如果您有字符串格式的日期,则需要先将其解析为 Date 格式,然后再进行格式化。

例子:

   String str = "Fri Mar 1, 2013 4:30 PM";
   SimpleDateFormat sdf2 = new SimpleDateFormat("E MMM dd, yyyy HH:mm a"); 
   Date parsedDate = sdf2.parse(str);
   System.out.println("Parsed Date: " + parsedDate);

   sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS a");
   System.out.println("Formatted Date: " + sdf2.format(parsedDate));

输出:

Parsed Date: Fri Mar 01 04:30:00 IST 2013
Formatted Date: 2013-03-01 04:30:00 AM
于 2013-02-06T07:43:16.270 回答
3
String str = "Fri Mar 1, 2013 4:30 PM";          
SimpleDateFormat sdf1 = new SimpleDateFormat("EEE MMM dd, yyyy hh:mm a");
Date date = sdf1.parse(str);
System.out.println("Date Object:" + date);
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm a");
System.out.println("Formatted Date:" + sdf2.format(date));

输出:

日期对象:2013 年 3 月 1 日星期五 16:30:00 EST

格式化日期:2013-03-01 16:30 PM
于 2013-02-06T08:37:44.277 回答
0

前两个答案是 2013 年的好答案。时间在进步,Java 中时间信息的处理也在进步。如果您可以使用 Java 8,请自己使用新java.time包中的日期和时间类(也在 ThreeTen Backport 中向后移植到 Java 6 和 7):

    String str = "Fri Mar 1, 2013 4:30 PM";
    LocalDateTime ldt = LocalDateTime.parse(str, 
            DateTimeFormatter.ofPattern("EEE MMM d, uuuu h:mm a", Locale.ENGLISH));

这会产生一个没有时区的时间2013-03-01T16:30。要将其格式化为所需的输出格式:

    System.out.println(ldt.format(DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss")));

这打印:

2013-03-01 16:30:00

如果您想要 UTC 时间戳,您可以像这样从计算机的时区转换:

ldt.atZone(ZoneId.systemDefault()).toInstant()

由于我在中欧时区,因此在我的计算机上它会生成一个时间点2013-03-01T15:30:00Z(其中Z表示 UTC;Instant对象始终以 UTC 打印)。

链接:ThreeTen Backport Home

于 2017-04-07T12:42:59.277 回答