如何在android中将Joda时间格式化为dd-mm-yyyy


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)以来的整秒计数,请转换为InstantInstant类表示以UTC为单位的时间线上的一个时刻,分辨率为纳秒(最多九(9)位小数)。

Instant instant = Instant.ofEpochSecond( 1_485_748_890L );

要通过特定区域的挂钟时间来查看这一时刻,请指定一个时区(ZoneId)以获得ZonedDateTime

时区对于确定日期至关重要。在任何一个特定的时刻,日期都会因地区而异。例如,巴黎午夜过后几分钟,法国是新的一天,而魁北克省仍然是"昨天"。

continent/region的格式指定适当的时区名称,例如America/MontrealAfrica/CasablancaPacific/Auckland。千万不要使用3-4个字母的缩写,如ESTIST,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

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.DateCalendar和&SimpleDateFormat

JodaTime项目现在处于维护模式,建议迁移到java.Time类。

要了解更多信息,请参阅Oracle教程。并在Stack Overflow中搜索许多示例和解释。规范是JSR310。

从哪里获得java.time类?

  • Java SE 8SE 9及更高版本
    • 内置
    • 标准Java API的一部分,带有捆绑实现
    • Java 9添加了一些小功能和修复程序
  • Java SE 6SE 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

相关内容

  • 没有找到相关文章

最新更新