gpt4 book ai didi

java - 如何将 ISO 8601 句点转换为人类可读的字符串 [Android Studio]?

转载 作者:行者123 更新时间:2023-11-29 04:12:32 24 4
gpt4 key购买 nike

关于如何转换 ISO 8601 duration 的任何建议格式 PnYnMnDTnHnMnS(例如:P1W、P5D、P3D)到天数?

我正在尝试以向用户显示免费试用天数的方式设置按钮文本。

Google 通过键“freeTrialPeriod”以 ISO 8601 持续时间格式提供账单信息,但我需要用户可以实际阅读的数字。

应用程序当前的最低 API 级别是 18,因此 Java 8 中的 Duration 和 Period 类将无济于事,因为它们适用于等于或大于 26 的 API。

我已将以下方法设置为解决方法,但它看起来不是最佳解决方案:

private String getTrialPeriodMessage() {
String period = "";

try {
period = subsInfoObjects.get(SUBS_PRODUCT_ID).getString("freeTrialPeriod");
} catch (Exception e) {
e.printStackTrace();
}

switch (period) {
case "P1W":
period = "7";
break;
case "P2W":
period = "14";
break;
case "P3W":
period = "21";
break;
case "P4W":
period = "28";
break;
case "P7D":
period = "7";
break;
case "P6D":
period = "6";
break;
case "P5D":
period = "5";
break;
case "P4D":
period = "4";
break;
case "P3D":
period = "3";
break;
case "P2D":
period = "2";
break;
case "P1D":
period = "1";
}

return getString(R.string.continue_with_free_trial, period);
}

有什么改进建议吗?

谢谢!

最佳答案

java.time 和 ThreeTenABP

这是存在的。考虑不要重新发明轮子。

import org.threeten.bp.Period;

public class FormatPeriod {

public static void main(String[] args) {
String freeTrialString = "P3W";
Period freeTrial = Period.parse(freeTrialString);
String formattedPeriod = "" + freeTrial.getDays() + " days";
System.out.println(formattedPeriod);
}
}

这个程序输出

21 days

您需要添加一个检查以确保年份和月份为 0,或者如果它们不是,也将它们打印出来。使用 getYearsgetMonths Period 的方法类。

如您所见,周会自动转换为天。 Period类在内部不代表周,仅代表年、月和日。支持所有示例字符串。你可以解析 P1Y (1 年),P1Y6M (1 年 6 个月),P1Y2M14D (1年2个月14天),连P1Y5D , P2M , P1M15D , P35D当然还有P3W

问题:我可以在 Android 上使用 java.time 吗?

是的,java.time 在新旧 Android 设备上都能很好地工作。它只需要至少 Java 6

  • 在 Java 8 及更高版本以及较新的 Android 设备(从 API 级别 26 开始)中,现代 API 是内置的。在这种情况下,从 java.time 导入而不是 org.threeten.bp .
  • 在 Java 6 和 7 中获取 ThreeTen Backport,新类的反向端口(ThreeTen for JSR 310;查看底部的链接)。
  • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它叫做 ThreeTenABP。并确保从 org.threeten.bp 导入日期和时间类带有子包。

链接

关于java - 如何将 ISO 8601 句点转换为人类可读的字符串 [Android Studio]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54187563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com