Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:独立的时间数字_Java_Date_Time_Split - Fatal编程技术网

Java:独立的时间数字

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");

我试图将hh:mm类型的设置中的每个数字分隔为单独的数字。因此,如果时间是8:24,我会[0,8,2,4]。我该怎么做?

一旦从日期对象获得小时和分钟,您就可以使用
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”。