2016-11-09 63 views
1

我想要使用格式化程序将日期从一种格式转换为另一种格式。 但不知何故,这看起来没有工作。转换日期到给定的格式不起作用

以下是我的代码

Date today = Calendar.getInstance().getTime(); 
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.ms"); 
String folderName = formatter.format(today); 
Date date = formatter.parse(folderName); 
System.out.println("Folder date = " + date); //This prints Wed Nov 09 06:05:57 IST 2016 

我需要YYYY-MM-DD HH要打印日期:MM:ss.ms格式。 这是我需要它是2016-11-09 06:50:25.5025而不是Wed Wed 09 06:05:57 IST 2016 在文件夹名称它是在正确的格式,但是当我再次转换为日期格式更改。 你能让我知道我失踪了吗?

+2

“ms”??尝试“SSS”!请参阅https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html – Fildor

+0

仅供参考,麻烦的旧日期时间类,例如['java.util.Date'](https: //docs.oracle.com/javase/8/docs/api/java/util/Date.html),['java.util.Calendar'](https://docs.oracle.com/javase/8/docs /api/java/util/Calendar.html)和'java.text.SimpleTextFormat'现在是[legacy](https://en.wikipedia.org/wiki/Legacy_system),由[java.time]代替( https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html)类。请参见[Oracle教程](https://docs.oracle.com/javase/tutorial/datetime/TOC.html)。 –

回答

3

你做了两个错误:

的格式(检查here为格式的完整列表)是yyyy-MM-dd hh:mm:ss.SSS

而且你需要打印字符串,而不是日期。

Date today = Calendar.getInstance().getTime(); 
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS"); 
String folderName = formatter.format(today); 
System.out.println("Folder date = " + folderName); 
+0

当我以这种方式打印它的作品。 但我需要日期对象来保存该格式。 这可能吗? – Sachin

+1

@Sachin日期对象**没有格式**。这是格式化程序的用途。 – Fildor

+0

日期保存值,而不是格式。如果您需要打印它,您需要像使用DateFormat一样将其转换为字符串。 –

1

使用java.time

您正在使用旧麻烦日期时间类,现在的传统,由java.time类取代。

ZoneId z = ZoneId.of("Asia/Kolkata") ; 
ZonedDateTime now = ZonedDateTime.now(z) ; 

now.toString():2016-11-09T06:50:25.502 + 05:30 [亚/加尔各答]

生成的字符串。您所需的格式接近标准ISO 8601格式,只需在中间用空格替换T即可。 java.time类了解ISO 8601格式。

DateTimeFormatter f = DateTimeFormatter.ISO_LOCAL_DATE_TIME ; 
String output = now.format(f).replace("T" , " ") ; 

2016年11月9日06:50:25.502


关于java.time

java.time框架是建立在Java 8和更高版本。这些类取代了日期时间类legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time项目现在位于maintenance mode,建议迁移到java.time类。请参阅Oracle Tutorial。并搜索堆栈溢出了很多例子和解释。规格是JSR 310

从何处获取java.time类?

ThreeTen-Extra项目与其他类扩展java.time。这个项目是未来可能增加java.time的一个试验场。您可以在这里找到一些有用的类,如Interval,YearWeek,YearQuartermore