将 Joda-Time DateTime 格式化为字符串

Formatting Joda-Time DateTime to String

我无法将 DateTime 格式转换为字符串,我只是不知道如何从这种类型中正确获取时分秒。当我尝试我的方式时,我得到了类似 2020-01-17T20:19:00 的东西。但我只需要 20:19:00.

import org.joda.time.DateTime; 

public DateTime orderDateFrom;
Log.d(TAG, orderDateFrom.toString());

可能有更好的方法来执行此操作,但您可以只获取子字符串。

String orderDateStr = orderDateFrom.toString();
orderDateStr.substring(orderDateStr.lastIndexOf("T")+1);
This will get time as 23:10:04 format

import java.text.SimpleDateFormat;
import java.util.Date;
import org.joda.time.DateTime;


        public DateTime orderDateFrom;

        Date d = orderDateFrom.toDate();
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        String formattedDate = sdf.format(d);

试试这个

SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
Date date = new Date();
System.out.println(formatter.format(date));

由于您已经在使用 Joda-Time,我建议您在两个选项中进行选择:

  1. 暂时坚持使用 Joda-Time。
  2. 升级到 java.time,现代 Java 日期和时间 API 和 Joda-Time 的后继者。

我当然全心全意反对的选项是从 Java 1.0 和 1.1 回到 DateSimpleDateFOrmat。那些 类 设计不佳且早已过时,后者尤其麻烦。

坚持使用 Joda-Time

如果您希望将 DateTime 中的时间格式化为 String,例如用于输出给用户:

    DateTime orderDateFrom = new DateTime(2020, 1, 17, 20, 19, 0, DateTimeZone.forID("Mexico/BajaSur"));

    DateTimeFormatter timeFormatter = DateTimeFormat.forPattern("HH:mm:ss");
    String formattedTime = orderDateFrom.toString(timeFormatter);
    System.out.println("Order time: " + formattedTime);

此片段的输出是:

Order time: 20:19:00

如果您希望将一天中的时间作为可用于进一步处理的对象:

    LocalTime orderTime = orderDateFrom.toLocalTime();
    System.out.println("Order time: " + orderTime);

Order time: 20:19:00.000

我们注意到这次还打印了三位小数的秒数,因为无参数 toString 方法可以做到这一点。如果愿意,您可以使用与上述相同的格式化程序格式化 LocalTime 以获得相同的字符串。

关于 java.time Android

的注释

如果为上面的 Android API 级别 26 and/or 编程,java.time 是内置的。如果您需要考虑较低的 API 级别,java.time 就像 Joda-Time 一样作为外部依赖项出现:ThreeTenABP。这是 JSR-310 的 ThreeTen,其中首次描述了 java.time,而 ABP 是 Android Backport。请参阅底部的链接。

代码将与上面使用 Joda-Time 的代码类似,但不完全相同。

链接