gpt4 book ai didi

java - 时间选择器整数错误

转载 作者:行者123 更新时间:2023-11-30 02:13:41 25 4
gpt4 key购买 nike

我的首选项 Activity 中有一个时间选择器,用于设置应显示通知的时间。该值存储为字符串,例如:“15:45”。为了理解这个问题,我将进一步解释值旁边发生的情况:

SharedPreferences pref= PreferenceManager.getDefaultSharedPreferences(context);
String hour = pref.getString("notification_time","");
// notification_time is my preference key
String Hora = hour;
int hours = Integer.parseInt(Hora.substring(0, 2));
int min = Integer.parseInt(Hora.substring(3, 5));
// as you can see, I parse the string, and then use the integers to set the time (see below)
calendar.set(Calendar.HOUR_OF_DAY, hours);
calendar.set(Calendar.MINUTE, min);
calendar.set(Calendar.SECOND, 00);

现在的问题是,如果时间是上午,我的 TimePicker 会以不同的方式存储值:例如,如果您将时间设置为 07:45,它会将字符串中的时间存储为“7:45”,而不是“07:45",因此代码中的这一行失败了:

int hours = Integer.parseInt(Hora.substring(0, 2));

(抛出这个错误,不是真正需要理解的问题):

java.lang.NumberFormatException: Invalid int: "5:"

,因为“substring”的位置不再有效。 (1 个数字存储在字符串中而不是 2 个)。分钟也是如此,例如,如果我将分钟设置为 08,我的时间选择器将它们存储为 8,并且再次出现同样的问题。

现在我想到了两种方法来解决这个问题:要么我更改 settingsactivity 中的代码并以不同方式解析字符串,要么我更改存储字符串的方式:

if (positiveResult) {
lastHour=picker.getCurrentHour();
lastMinute=picker.getCurrentMinute();
String time=String.valueOf(lastHour)+":"+String.valueOf(lastMinute);

if (callChangeListener(time)) {
persistString(time);
}
setSummary(getSummary());
}

(这些是负责将值保存为字符串的代码行)

我该如何解决这个问题?

最佳答案

您可以尝试使用DateFormatparse 方法来解析您的通知时间字符串。这将返回一个 Date 对象,您可以使用它来设置 Calendar 对象的日期/时间。

类似于:

DateFormat df = new SimpleDateFormat("H:mm"); // construct date formatter to recognize your time pattern
Date myDate = df.parse(pref.getString("notification_time",""));
calendar.setTime(myDate); // set the time of calendar object

// do other stuff with date here...

这样一来,您就无需为解析时间而烦恼,您可以让现有工具为您完成这项工作。

简单测试:

public class Test {
public static void main(String[] args) throws Exception {
DateFormat df = new SimpleDateFormat("H:mm");
Date myDate = df.parse("17:45");
System.out.println(myDate.toString());

Calendar c = Calendar.getInstance();
c.setTime(myDate);

int hours = c.get(Calendar.HOUR_OF_DAY);
int min = c.get(Calendar.MINUTE);

System.out.println("Hour = " + hours + "\nMin = " + min);
}
}

产生:

Thu Jan 01 17:45:00 PST 1970
Hour = 17
Min = 45

关于java - 时间选择器整数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29734542/

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