【问题标题】:Formatting Joda-Time DateTime to String将 Joda-Time DateTime 格式化为字符串
【发布时间】:2023-04-09 21:14:01
【问题描述】:

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

import org.joda.time.DateTime; 

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

【问题讨论】:

标签: java android time jodatime android-jodatime


【解决方案1】:

由于您已经在使用 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);

这个 sn-p 的输出是:

下单时间:20:19:00

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

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

下单时间:20:19:00.000

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

关于 Android 上 java.time 的说明

如果针对 Android API 级别 26 和/或更高级别进行编程,则 java.time 是内置的。如果您需要考虑较低的 API 级别,java.time 就像 Joda-Time 一样作为外部依赖项:ThreeTenABP。这是 JSR-310 的 ThreeTen,java.time 是第一次被描述的地方,以及 Android Backport 的 ABP。请参阅底部的链接。

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

链接

【讨论】:

    【解决方案2】:

    试试这个

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

    【讨论】:

    【解决方案3】:
    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类。至少当提问者已经在使用更现代、对程序员更友好的 Joda-Time 时不会。今天我们甚至在java.time, the modern Java date and time API, 和它的DateTimeFormatter 中做得更好。是的,您可以在 Android 上使用它。对于较旧的 Android,请参阅 How to use ThreeTenABP in Android Project
    【解决方案4】:

    可能有更好的方法可以做到这一点,但你可以只获取子字符串。

    String orderDateStr = orderDateFrom.toString();
    orderDateStr.substring(orderDateStr.lastIndexOf("T")+1);
    

    【讨论】:

    • 哦,不,谢谢,但这绝对不是我想做的)我知道如何子串
    猜你喜欢
    • 2013-12-18
    • 2011-04-16
    • 2012-07-19
    • 2017-01-11
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多