Android 为什么我设定了时间却变得不同?

Android 为什么我设定了时间却变得不同?,android,Android,我有以毫秒为单位的时间,我想将其转换为小时、分钟和秒。我尝试过这段代码,但不知何故,我得不到当前时间。示例: 我设定了3:50的时间,但得到了7:50。为什么会发生这种情况 以下是我设置、获取和显示时间的方式: Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MINUTE,timePicker.getCurrentMinute()); calendar.set(Calendar.HOUR_OF_DAY,timeP

我有以毫秒为单位的时间,我想将其转换为小时、分钟和秒。我尝试过这段代码,但不知何故,我得不到当前时间。示例: 我设定了3:50的时间,但得到了7:50。为什么会发生这种情况

以下是我设置、获取和显示时间的方式:

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MINUTE,timePicker.getCurrentMinute());
calendar.set(Calendar.HOUR_OF_DAY,timePicker.getCurrentHour());
long alarm3 = calendar.getTimeInMillis();
        long alarm4 = (alarm3/(1000*60*60))%24;
        long alarm5 = (alarm3/(1000*60))%60;
        long alarm6 = (alarm3/1000)%60;
Log.i("Alarm1","Hours:" + Long.toString(alarm4));
        Log.i("Alarm1","Minutes:" + Long.toString(alarm5));
        Log.i("Alarm1","Seconds:" + Long.toString(alarm6));
你可以用

你可以用

使用此功能

public static String getTimeFromMilliseconds(long milliseconds) {

        return (new SimpleDateFormat("HH:mm:ss")).format(new Date(milliseconds));
    }
使用此功能

public static String getTimeFromMilliseconds(long milliseconds) {

        return (new SimpleDateFormat("HH:mm:ss")).format(new Date(milliseconds));
    }

虽然上面的答案只会使它起作用,但您可能仍然想知道为什么您的解决方案没有起作用。这很可能是因为时区偏移。当您获得日历的实例时:

Calendar calendar = Calendar.getInstance();
它继承了您的区域设置,也继承了您的时区。 然后,假设您的应用程序的计时器在同一时区工作,您可以统一设置分钟和小时:

calendar.set(Calendar.MINUTE,timePicker.getCurrentMinute());
calendar.set(Calendar.HOUR_OF_DAY,timePicker.getCurrentHour());
但在结束时,此特定方法返回UTC时间:

long alarm3 = calendar.getTimeInMillis();

因此,我猜您的TZ偏移量是4小时。

虽然上面的答案只会使它起作用,但您可能仍然想知道为什么您的解决方案没有起作用。这很可能是因为时区偏移。当您获得日历的实例时:

Calendar calendar = Calendar.getInstance();
它继承了您的区域设置,也继承了您的时区。 然后,假设您的应用程序的计时器在同一时区工作,您可以统一设置分钟和小时:

calendar.set(Calendar.MINUTE,timePicker.getCurrentMinute());
calendar.set(Calendar.HOUR_OF_DAY,timePicker.getCurrentHour());
但在结束时,此特定方法返回UTC时间:

long alarm3 = calendar.getTimeInMillis();

所以我猜您的TZ偏移是4小时。

您是使用上下箭头设置时间还是编辑文本本身@穆罕默德·雷法特如果你指的是我使用的视图,那么我就使用时间选择器。如果没有,那么请解释你的问题我知道你在使用计时器,我在问你如何使用它来设定时间?!!由于时间选择器有两种使用方式,第一种是通过(加号/地雷)按钮使用,第二种是通过android键盘使用,所以如果你通过android键盘使用,这可能是你的问题,然后我会解释原因。@muhammed Refat,我想是有加号和减号的,但我不确定,因为我使用的是api级别为19的emulator,我没有任何加号和减号,我所要做的就是滚动。好吧,没关系,请记住,当你自己使用键盘编辑小时或分钟时,它不会反映,直到你删除你编辑的东西的焦点,这可能会帮助你进一步。你是使用上下箭头设置时间还是编辑文本本身@穆罕默德·雷法特如果你指的是我使用的视图,那么我就使用时间选择器。如果没有,那么请解释你的问题我知道你在使用计时器,我在问你如何使用它来设定时间?!!由于时间选择器有两种使用方式,第一种是通过(加号/地雷)按钮使用,第二种是通过android键盘使用,所以如果你通过android键盘使用,这可能是你的问题,然后我会解释原因。@muhammed Refat,我想是有加号和减号的,但我不确定,因为我使用的是api级别为19的emulator,我没有任何加号和减号,我所要做的就是滚动。好吧,没关系,请记住,当你自己使用键盘编辑小时或分钟时,除非你删除你编辑的内容的焦点,否则它不会反映,这可能会进一步帮助你。它不应该——警报会以与应用程序时间相同的偏移量触发,因此只是你的日志显示有趣(UTC)时间。你认为我用米尔斯时间设置警报可以吗?不应该-警报触发时的偏移量与应用程序的时间相同,所以只是你的日志显示有趣的(UTC)时间。你认为我用米尔斯时间设置警报可以吗?