Java:独立的时间数字
我试图将hh:mm类型的设置中的每个数字分隔为单独的数字。因此,如果时间是8:24,我会[0,8,2,4]。我该怎么做?一旦从日期对象获得小时和分钟,您就可以使用Java:独立的时间数字,java,date,time,split,Java,Date,Time,Split,我试图将hh:mm类型的设置中的每个数字分隔为单独的数字。因此,如果时间是8:24,我会[0,8,2,4]。我该怎么做?一旦从日期对象获得小时和分钟,您就可以使用mod和%运算符来计算各个数字 从日期对象获取小时和分钟后,可以使用mod和%运算符计算各个数字 您需要使用HH:mm日期模式格式化输入文本,删除所有非数字字符,最后将字符串拆分为多个字符 String inputTime = "8:24"; DateFormat df = new SimpleDateFormat("HH:mm");
mod
和%
运算符来计算各个数字 从日期对象获取小时和分钟后,可以使用mod
和%
运算符计算各个数字 您需要使用HH:mm日期模式格式化输入文本,删除所有非数字字符,最后将字符串拆分为多个字符
String inputTime = "8:24";
DateFormat df = new SimpleDateFormat("HH:mm");
String formattedInputTime = df.format(df.parse(inputTime));
String timeDigits = formattedInputTime.replaceAll("[^\\d]", "");
char[] timeDigitTokens = timeDigits.toCharArray();
for (char timeDigitToken : timeDigitTokens) {
System.out.println(timeDigitToken);
}
您需要使用HH:mm日期模式格式化输入文本,删除所有非数字字符,最后将字符串拆分为多个字符
String inputTime = "8:24";
DateFormat df = new SimpleDateFormat("HH:mm");
String formattedInputTime = df.format(df.parse(inputTime));
String timeDigits = formattedInputTime.replaceAll("[^\\d]", "");
char[] timeDigitTokens = timeDigits.toCharArray();
for (char timeDigitToken : timeDigitTokens) {
System.out.println(timeDigitToken);
}
基于Chris Nava的想法(首先投票表决他的答案),假设您想要
int
数字而不是char
:
public class TimeSplit {
public static void main(String[] args) throws ParseException {
printSplit("8:24"); // [0, 8, 2, 4]
printSplit("10:22"); // [1, 0, 2, 2]
printSplit("13:57"); // [0, 1, 5, 7] because of 12h
}
private static void printSplit(String time) throws ParseException {
System.out.println(time + " -> " + Arrays.toString(split(time)));
}
private static int[] split(String time) throws ParseException {
DateFormat fmt = new SimpleDateFormat("hh:mm"); // 12h, use HH for 24h
Calendar calendar = Calendar.getInstance();
calendar.setTime(fmt.parse(time));
return split(calendar);
}
private static int[] split(Calendar time) {
int hours = time.get(Calendar.HOUR); // 12h, use HOUR_OF_DAY for 24h
int minutes = time.get(Calendar.MINUTE);
int[] digits = new int[4];
digits[0] = hours / 10;
digits[1] = hours % 10;
digits[2] = minutes / 10;
digits[3] = minutes % 10;
return digits;
}
}
输出:
8:24 -> [0, 8, 2, 4]
10:22 -> [1, 0, 2, 2]
13:57 -> [0, 1, 5, 7]
基于Chris Nava的想法(首先向上投票他的答案),并假设您想要
int
数字而不是char
:
public class TimeSplit {
public static void main(String[] args) throws ParseException {
printSplit("8:24"); // [0, 8, 2, 4]
printSplit("10:22"); // [1, 0, 2, 2]
printSplit("13:57"); // [0, 1, 5, 7] because of 12h
}
private static void printSplit(String time) throws ParseException {
System.out.println(time + " -> " + Arrays.toString(split(time)));
}
private static int[] split(String time) throws ParseException {
DateFormat fmt = new SimpleDateFormat("hh:mm"); // 12h, use HH for 24h
Calendar calendar = Calendar.getInstance();
calendar.setTime(fmt.parse(time));
return split(calendar);
}
private static int[] split(Calendar time) {
int hours = time.get(Calendar.HOUR); // 12h, use HOUR_OF_DAY for 24h
int minutes = time.get(Calendar.MINUTE);
int[] digits = new int[4];
digits[0] = hours / 10;
digits[1] = hours % 10;
digits[2] = minutes / 10;
digits[3] = minutes % 10;
return digits;
}
}
输出:
8:24 -> [0, 8, 2, 4]
10:22 -> [1, 0, 2, 2]
13:57 -> [0, 1, 5, 7]
不需要像上面建议的那样删除非数字字符,只是不要将它们放在格式化日期中。此外,不需要调用toCharArray,因为您可以通过String.charAt方法直接获取每个字符:
String s = new SimpleDateFormat("mmss").format(new Date());
System.out.println(s.charAt(0));
System.out.println(s.charAt(1));
System.out.println(s.charAt(2));
System.out.println(s.charAt(3));
不需要像上面建议的那样删除非数字字符,只是不要将它们放在格式化日期中。此外,不需要调用toCharArray,因为您可以通过String.charAt方法直接获取每个字符:
String s = new SimpleDateFormat("mmss").format(new Date());
System.out.println(s.charAt(0));
System.out.println(s.charAt(1));
System.out.println(s.charAt(2));
System.out.println(s.charAt(3));
好吧,问题负责人没有指定,每个条件是什么,是日期还是字符串,日期应该是hh(基于12小时)还是hh(基于24小时)。charAt(idx)方法检查字符串内部数组中的边界,获取4行脏的硬编码代码,而toCharArray()方法只将其内部字符数组的复制工作委托给System.arraycopy(..),并且只获取一行干净的通用代码。但是+1表示“hhmm”格式,而不是“hh:mm”。问题所有者没有指定,根据条件是什么,是日期还是字符串,以及日期是hh(基于12小时)还是hh(基于24小时)。charAt(idx)方法检查字符串内部数组中的边界,获取4行脏的硬编码代码,而toCharArray()方法只将其内部字符数组的复制工作委托给System.arraycopy(..),并且只获取一行干净的通用代码。但是+1表示“hhmm”格式,而不是“hh:mm”。