我正在尝试使用以下格式转换日期:“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
先谢谢
答案 0 :(得分:3)
假设您将日期和时间作为日期。因此,您需要SimpleDateFormatter的format
方法。探索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格式打印)