如何在Android中将Joda Time格式化为dd-mm-yyyy?

时间:2017-01-29 15:58:11

标签: android jodatime android-jodatime

 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格式化日期。

3 个答案:

答案 0 :(得分:1)

TL;博士

使用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(见下文)。

java.time

LocalDate类表示没有时间且没有时区的仅限日期的值。

LocalDate birthdate = LocalDate.of( 1994 , 5 , 10 );

如果您的输入是自1970年第一个时刻(UTC 1970-01-01T00:00:00Z)以来的整秒计数,请转换为InstantInstant类代表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/MontrealAfrica/CasablancaPacific/Auckland。切勿使用诸如ESTIST之类的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.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance 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