我有一辆Joda DateTime2012-12-31T13:32:56.483+13:00。我想把它转换成dd/MM/yy格式的日期。所以我希望代码能返回-31/12/12这样的日期。
代码-
// Input dateTime = 2012-12-31T13:32:56.483+13:00
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yy");
Date date = simpleDateFormat.parse(dateTime.toString("dd/MM/yy"));
结果:
Output - Mon Dec 31 00:00:00 NZDT 2012
Expected Output - 31/12/12
号
当我执行以下操作时,我得到了预期的输出,但我不知道如何将其转换为日期-
String string = simpleDateFormat.format(date);
请帮帮我。
谢谢
编辑-我希望最终结果是dd/mm/yy格式的使用日期。我不想要字符串输出。我的输入是joda datetime yyyy-mm ddthh:mm:ss:+gmt。我需要将jodadatetime转换为utildate。
2位数年份。艾耶克
Ya。我也不喜欢,但数据库在我的模式中只允许2位数的年份。同样,我也会得到同样的4位数年份的错误。
日期本身没有格式。可以通过指定的日期格式将日期格式化为/或从字符串中分析,但它本身不具有格式。
我正在尝试转换jodatime->java.util.date并截断时间组件,并获取dd/mm/yy格式的结果日期。谢谢
伟大的!我将在下面编辑我的答案。谢谢萨拉。
也许这就是你要找的?stackoverflow.com/questions/5050170/…
这是你的做法
Format formatter = new SimpleDateFormat("dd/MM/yy");
String string = formatter.format(date);
正如我最初所说,日期对象没有固有的格式。java.util.Date持有毫秒时间值,表示日期和时间。通过选择日期格式,可以将日期从字符串解析为字符串,或将其格式化为字符串。
字符串可以按照规范格式化,但其后面的日期对象始终是完全精确的,并且没有任何固有的格式概念。
将"日期和时间"java.util.Date组合截断为"日期"组件,使其在午夜有效:
public static Date truncateTime (Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime( date);
cal.set( Calendar.HOUR_OF_DAY, 0);
cal.set( Calendar.MINUTE, 0);
cal.set( Calendar.SECOND, 0);
cal.set( Calendar.MILLISECOND, 0);
return cal.getTime();
}
如果您来自于jodatime DateTime,那么您可以更容易地在jodatime API中工作。
public static Date truncateJodaDT (DateTime dt) {
java.util.Date result = dt.toDateMidnight().toDate();
return result;
}
号
希望这有帮助!
见:
http://joda time.sourceforge.net/apidocs/org/joda/time/datetime.html todatemiddy())
http://joda time.sourceforge.net/apidocs/org/joda/time/base/abstractinstant.html_todate()。
现在我又不确定你想要什么。您现在要字符串格式的日期吗?
return simpleDateFormat.format( date); // from java.util.Date
或使用jodatime:
return dateTime.toString("dd/MM/yy"); // from org.joda.time.DateTime
。
我的日期变量将Mon-Dec 31 00:00:00 NZDT 2012作为输出。当我进行格式化时,我得到了正确的格式,但是如何将其转换为日期?
date是日期。格式化将其转换为字符串。所以您已经正确解析了日期!如果您真的想要,可以将字符串解析回一个日期。但你已经做过一次了:)
我理解使用格式将日期转换为字符串。在此之前,当我做date=simpledateformat.parse(datetime.toLocalDate().toString("dd/m‌&8203;m/yy");我得到mon-dec 31 00:00:00 NZDT 2012,但我希望它给我31/12/12…:(
你的问题很不清楚。我已经编辑了我的帖子,将你可能尝试做的其他事情包括在内,但也许你应该正确地告诉我们你想要达到的目标。您希望结果的数据类型是什么?您打算如何/在何处使用它?
我希望我的最终结果是日/月/年格式的使用日期。我不想要绳子。我的输入是joda datetime yyyy-mm ddthh:mm:ss:+gmt。我需要将jodadatetime转换为utildate。
太好了,很清楚!请参见编辑的答案。
这看起来是直截了当的,但我仍然得到了结果——2012年12月31日周一00:00:00 NZDT。在今天的午夜()结束时,我得到了2012-12-31t00:00:00.000+13:00。在.todate()之后,它将成为2012年12月31日星期一00:00:00 NZDT。但我需要答案-2012年12月31日
所以您想将日期格式化为dd/mm/yy字符串吗?请参见编辑..但我想我们几个小时前就已经讨论过如何做到这一点了。
@萨拉:正如托马斯之前在评论中所说,date对象本身没有格式。因此,不可能"有一个格式为dd/MM/yy的date对象"。将date转换为String进行格式化时,指定格式。SimpleDateFormat对象知道格式,但不知道date对象本身。
谢谢托马斯。这对我有很大帮助。
DR
OffsetDateTime.parse("2012-12-31T13:32:56.483+13:00" ).toLocalDate()
。joda time被java.time取代
现在处于维护模式的joda time项目建议迁移到java.time类。ISO 8601标准
您的输入字符串采用标准ISO 8601格式。
默认情况下,java.time类使用标准格式,因此无需指定格式模式。日期时间对象与字符串
正如接受的答案所解释的,您不应该将日期时间对象与可能以文本形式表示其值的字符串相混淆。java.util.Date对象没有格式,因为它没有文本。对于java.time类,同上。您可以使用java.time对象来解析字符串或生成字符串,但该对象是不同的,并且与字符串分离。江户十一〔四〕号
将输入字符串解析为OffsetDateTime,因为它包括与UTC的偏移量,尽管它没有时区。
OffsetDateTime odt = OffsetDateTime.parse("2012-12-31T13:32:56.483+13:00" );
埃多克斯1〔6〕
如果您需要仅限日期的值,请使用LocalDate类。记住,在任何给定的时刻,日期都会随着时区的不同而在全球范围内变化。午夜过后的一分钟是巴黎的新一天,而在蒙特勒魁北克仍然是"昨天"。如果您想要从同一个偏移量的+13:00开始计算日期,只需调用toLocalDate。
LocalDate localDate = odt.toLocalDate();
。
问题是您不需要字符串,只需要日期对象。那就这样吧。如果以后需要字符串,请调用toString以生成标准ISO 8601格式的字符串,2012-12-31。对于其他格式,搜索DateTimeFormatter的堆栈溢出。关于java.time
JavaTimeFr框架是在Java 8和之后构建的。这些类取代了麻烦的旧遗留日期时间类,如java.util.Date、Calendar、&SimpleDateFormat。
现在处于维护模式的joda time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle教程。以及搜索堆栈溢出以获得许多示例和解释。规格为JSR 310。
在哪里获取java.time类?
Java SE 8和SE 9及以后
内置。
标准JAVA API的一部分与捆绑实现。
Java 9增加了一些次要的特性和修复。
Java SE 6和SE 7
大部分JavaTimeActudio都被移植到TealEnter后端的Java 6和7中。
安卓
threetenabp项目专门为Android调整threeten backport(如上所述)。
看看如何使用三连珠……
threeten额外项目使用额外的类扩展java.time。这个项目是将来可能添加到java.time的一个试验场。您可以在这里找到一些有用的类,如Interval、YearWeek、YearQuarter等等。
使用Java 8提供的日期时间类
LocalDate parsedDate = LocalDate.parse(dateStr,DateTimeFormatter.ISO_ZONED_DATE_TIME);
。