String DOB = new DateTime(Long.parseLong(dob) * 1000, DateTimeZone.UTC ).toString();
// Current
// YYYY-MM-DD
// DOB = "1994-05-10T00:00.000Z"
// Required
// DD-MM-YYYY
// DOB = "10-05-1994"
我想删除hh:mm:ss并使用Joda Time DateTimeFormatter格式化日期。
试试这个:
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS zzz");
// pass your DOB String
DateTime jodatime = dtf.parseDateTime(DOB);
// Format for output
DateTimeFormatter dtfOut = DateTimeFormat.forPattern("dd-MM-yyyy");
// Print the date
System.out.println(dtfOut.print(jodatime));
tl;dr
使用java.time类。
Instant.ofEpochSecond( 1_485_748_890L )
.atZone( ZoneId.of( "America/Montreal" ) )
.toLocalDate()
.format(
DateTimeFormatter.ofPattern ( "dd-MM-uuuu" )
.withLocale ( Locale.UK )
)
2017年1月29日
Joda时间
如果您想要一个只包含日期而不包含时间的值,则应该使用org.joda.time.LocalDate
类。
仅供参考,JodaTime项目现在处于维护模式,团队建议迁移到java.Time类。java.time的大部分内容都被后移植到Java6、Java7和Android(见下文)。
java.time
LocalDate
类表示一个仅限日期的值,没有一天中的时间和时区。
LocalDate birthdate = LocalDate.of( 1994 , 5 , 10 );
如果您的输入是自1970年UTC第一时刻的历元(1970-01-01T00:00:00Z
)以来的整秒计数,请转换为Instant
。Instant
类表示以UTC为单位的时间线上的一个时刻,分辨率为纳秒(最多九(9)位小数)。
Instant instant = Instant.ofEpochSecond( 1_485_748_890L );
要通过特定区域的挂钟时间来查看这一时刻,请指定一个时区(ZoneId
)以获得ZonedDateTime
。
时区对于确定日期至关重要。在任何一个特定的时刻,日期都会因地区而异。例如,巴黎午夜过后几分钟,法国是新的一天,而魁北克省仍然是"昨天"。
以continent/region
的格式指定适当的时区名称,例如America/Montreal
、Africa/Casablanca
或Pacific/Auckland
。千万不要使用3-4个字母的缩写,如EST
或IST
,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
LocalDate
类表示一个仅限日期的值,没有一天中的时间和时区。
LocalDate ld = zdt.toLocalDate();
要生成表示对象值的字符串,请为标准ISO 8601格式YYYY-MM-DD的字符串调用toString
。
ld.toString():2017-01-29
对于其他格式,请使用DateTimeFormatter
类。您可以指定格式模式,或者让类自动本地化。
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "dd-MM-uuuu" ).withLocale ( Locale.UK );
String output = ld.format ( f );
instant.toString():2017-01-30T04:01:30Z
zdt.toString():2017-01-29T23:01:30-05:00〔美国/蒙特利尔〕
ld.toString():2017-01-29
输出:2017年1月29日
关于java.time
java.time框架是在java 8及更高版本中构建的。这些类取代了诸如java.util.Date
、Calendar
和&SimpleDateFormat
。
JodaTime项目现在处于维护模式,建议迁移到java.Time类。
要了解更多信息,请参阅Oracle教程。并在Stack Overflow中搜索许多示例和解释。规范是JSR310。
从哪里获得java.time类?
- Java SE 8和SE 9及更高版本
- 内置
- 标准Java API的一部分,带有捆绑实现
- Java 9添加了一些小功能和修复程序
- Java SE 6和SE 7
- 大部分Java.time功能都是向后移植到Java 6&7英寸ThreeTen背包
- Android
- ThreeTenABP项目专门为Android改编了ThreeTen Backport(如上所述)
- 请参阅如何使用ThreeTenABP…
试试这个:
String textDate ="1994-05-10T00:00.000Z"; //Date to convert
DateTimeFormatter DATE_FORMAT = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ"); //Default format
SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()); //Needed format
DateTime dateTime = new DateTime(DATE_FORMAT.parseDateTime(textDate), DateTimeZone.forID(current.getID()));
Calendar cal=dateTime.toCalendar(Locale.getDefault());
String formatted = SIMPLE_DATE_FORMAT.format(cal.getTime()); //Final Required date