java将字符串格式的日期转换为时间戳

时间:2013-02-06 07:38:16

标签: java

我正在尝试使用以下格式转换日期:“2013年3月1日星期五下午4:30”到  此格式的时间戳值: 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

先谢谢

3 个答案:

答案 0 :(得分: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

如果你有字符串格式的日期,你需要首先在日期解析然后格式化它。

示例:

   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

答案 1 :(得分: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));

输出:

Date Object: Fri Mar 01 16:30:00 EST 2013 

Formatted Date: 2013-03-01 16:30 PM

答案 2 :(得分: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