android 如何更改日期的时区安卓Kotlin[HH:mm]

huwehgph  于 2022-12-16  发布在  Android
关注(0)|答案(3)|浏览(435)

作为输入,我得到了一个类似HH:mm的字符串,它是UTC,但我需要将时间转换为+3小时(即UTC +3)。
例如,它是12:30 -它变成了15:30。
我试过这个代码,但它不工作:(

fun String.formatDateTime(): String {
    val sourceFormat = SimpleDateFormat("HH:mm", Locale.getDefault())
    sourceFormat.timeZone = TimeZone.getTimeZone("UTC")
    val parsed = sourceFormat.parse(this)

    val tz = TimeZone.getTimeZone("UTC+3")
    val destFormat = SimpleDateFormat("HH:mm", Locale.getDefault())
    destFormat.timeZone = tz

    return parsed?.let { destFormat.format(it) }.toString()
}

我该怎么做?

zdwk9cvp

zdwk9cvp1#

Java.时间

java.util Date-Time API及其格式化API SimpleDateFormat已过时且容易出错。建议完全停止使用它们并切换到modern Date-Time API

使用java.time API的解决方案

使用LocalTime#parse解析给定的时间字符串,然后使用LocalTime#atOffset将其转换为UTC OffsetTime。最后一步是将此UTC OffsetTime转换为偏移量为+03:00OffsetTime,您可以使用OffsetTime#withOffsetSameInstant完成此操作。
请注意,您不需要DateTimeFormatter来解析时间字符串,因为它已经是ISO 8601,这是java.time类型使用的默认格式。

演示

class Main {
    public static void main(String args[]) {
        String sampleTime = "12:30";
        OffsetTime offsetTime = LocalTime.parse(sampleTime)
                .atOffset(ZoneOffset.UTC)
                .withOffsetSameInstant(ZoneOffset.of("+03:00"));
        System.out.println(offsetTime);

        // Gettting LocalTine from OffsetTime
        LocalTime result = offsetTime.toLocalTime();
        System.out.println(result);
    }
}

输出

15:30+03:00
15:30

Online Demo

或者,

class Main {
    public static void main(String args[]) {
        String sampleTime = "12:30";
        OffsetTime offsetTime = OffsetTime.of(LocalTime.parse(sampleTime), ZoneOffset.UTC)
                .withOffsetSameInstant(ZoneOffset.of("+03:00"));
        System.out.println(offsetTime);

        // Gettting LocalTine from OffsetTime
        LocalTime result = offsetTime.toLocalTime();
        System.out.println(result);
    }
}

Online Demo
从**Trail: Date Time**了解有关现代日期-时间API的更多信息。

mkh04yzy

mkh04yzy2#

你可以使用java.time来完成这个任务,如果你只是想增加一个特定的小时数,你可以使用LocalTime.parse(String)LocalTime.plusHours(Long)DateTimeFormatter.ofPattern("HH:mm")

import java.time.LocalTime
import java.time.format.DateTimeFormatter

fun String.formatDateTime(hoursToAdd: Long): String {
    val utcTime = LocalTime.parse(this)
    val targetOffsetTime = utcTime.plusHours(hoursToAdd)
    return targetOffsetTime.format(DateTimeFormatter.ofPattern("HH:mm"))
}

fun main() {
    println("12:30".formatDateTime(3))
}

输出为15:30
尝试使用"22:30",您将得到"01:30"作为输出。
请注意,如果您不应该只添加三个小时,而是考虑到与UTC的偏移可能发生变化的真实的区,夏令时可能会导致问题。

jei2mxaa

jei2mxaa3#

@SuppressLint("SimpleDateFormat")
    fun getDayOfWeekOfMonthDateFormat(timeZone: String? = "GMT"): SimpleDateFormat {
        val format = SimpleDateFormat("MMMM EEEE dd")
        timeZone?.let {
            format.timeZone = TimeZone.getTimeZone(it)
        }
        return format
    }

This is function for returning "GMT" as default and if you wanna change,  add "GMT+5:30"

NB: change the format with your requirement

相关问题