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格式化日期。
答案 0 :(得分:1)
使用java.time类。
Instant.ofEpochSecond( 1_485_748_890L )
.atZone( ZoneId.of( "America/Montreal" ) )
.toLocalDate()
.format(
DateTimeFormatter.ofPattern ( "dd-MM-uuuu" )
.withLocale ( Locale.UK )
)
29-01-2017
如果您想要一个没有时间的仅限日期的值,那么您应该使用org.joda.time.LocalDate
类。
仅供参考,Joda-Time项目现在位于maintenance mode,团队建议迁移到java.time课程。大部分java.time都被反向移植到Java 6,Java 7和Android(见下文)。
LocalDate
类表示没有时间且没有时区的仅限日期的值。
LocalDate birthdate = LocalDate.of( 1994 , 5 , 10 );
如果您的输入是自1970年第一个时刻(UTC 1970-01-01T00:00:00Z
)以来的整秒计数,请转换为Instant
。 Instant
类代表UTC中时间轴上的一个时刻,分辨率为nanoseconds(小数部分最多九(9)位)。
Instant instant = Instant.ofEpochSecond( 1_485_748_890L );
要通过特定区域wall-clock time的镜头查看此时刻,请指定时区(ZoneId
)以获取ZonedDateTime
。
时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在Paris France午夜后的几分钟是新的一天,而Montréal Québec中仍然是“昨天”。
以continent/region
的格式指定proper time zone name,例如America/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用诸如EST
或IST
之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
LocalDate
类表示没有时间且没有时区的仅限日期的值。
LocalDate ld = zdt.toLocalDate();
要生成表示对象值的String,请为标准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
输出:29-01-2017
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
答案 1 :(得分:0)
试试这个:
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));
答案 2 :(得分:0)
试试这个:
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