标签: android-jodatime

为什么 JodaTime 时区会改变日期时间?

当字符串“2017-04-21T17:46:00Z”被传递到第一个方法时,生成的格式化日期字符串是“06:46 21 Apr 2017”。为什么小时移动了十一小时?输入字符串由 HTTP 服务器应用程序以 JSON 格式提供。我以为 Z 后缀指的是祖鲁语,即 GMT。

private static final String DATE_TIME_FORMAT = "hh:mm dd MMM yyyy";

public static String formatTimestamp(String dateTimestamp) {
    DateTime dateTime = getDateTimeFromTimestamp(dateTimestamp);
    DateTimeFormatter fmt = DateTimeFormat.forPattern(DATE_TIME_FORMAT);
    return fmt.print(dateTime);
}

private static DateTime getDateTimeFromTimestamp(String dateTimestamp) {
    return new DateTime(dateTimestamp);
}
Run Code Online (Sandbox Code Playgroud)

我怀疑它与时区有关,但不清楚如何或在哪里。该代码在英国的 Android 设备上运行,采用 GMT 时区。

android jodatime android-jodatime

5
推荐指数
1
解决办法
1733
查看次数

如何从字符串中解析时间(小时、分钟)?

有谁知道如何从看起来像 "01:20" -> 1:20AM 和 "21:20" -> 9:20PM 的字符串中解析时间(小时、分钟和 AM/PM)?大多数解决方案似乎都假设或需要 Date 或 Calendar 对象。

我的输入时间实际上来自 TimePickerDialog(特别是这个 MaterialDateTimePicker 实现,所以我只收到小时、分钟和秒(整数)。

我希望能够以友好的方式格式化用户选择的时间,即 12:30PM、02:15AM 等。

我正在尝试使用 Joda 时间:

fun formattedTime(timeStr: String): String {
    // Get time from date
    val timeFormatter = DateTimeFormat.forPattern("h:mm a")
    val displayTime = timeFormatter.parseLocalTime(timeStr)
    return displayTime.toString()
}
Run Code Online (Sandbox Code Playgroud)

但是我在输入字符串(例如“1:20”)时收到此错误: java.lang.IllegalArgumentException: Invalid format: "1:20" is too short

我也研究过SimpleDateFormat但它似乎需要一个完整的日期时间字符串,例如在这个相关问题中

java jodatime datetime-format android-jodatime

3
推荐指数
1
解决办法
4817
查看次数

如何使用 Joda-Time 计算两个日期之间的年数、月数和天数

我使用下面的代码来计算两个日期之间的年数、月数和天数 Joda-Time

public void getDateDiff(View view) {

    DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy").withLocale(Locale.US);
    DateTime startDate = null;
    DateTime endDate = null;

    // expected output 23...2....29

    try {
        startDate = formatter.parseDateTime("01/09/1995");
        endDate = formatter.parseDateTime("30/11/2018");

        Period period = new Period(startDate, endDate);

        Log.e("No Of Years : ", period.getYears() + " Years, ");
        Log.e("No Of Months : ", period.getMonths() + " Months, ");
        Log.e("No Of Days : ", period.getDays() + " Days, ");

        tvResult.setText(String.format("No Of Years : %d Years, \nNo Of Months : %d Months, \nNo …
Run Code Online (Sandbox Code Playgroud)

java android jodatime android-jodatime

2
推荐指数
2
解决办法
2849
查看次数