【问题标题】:how to get dateTime based on hour and minute如何根据小时和分钟获取日期时间
【发布时间】:2017-09-05 23:40:28
【问题描述】:

我在编辑文本中有小时和分钟。(例如 10:50)

如何根据上述编辑文本值 10:50 获取今天的日期时间(如 yyyy-MM-dd HH:mm:ss)

更新: 这对我有用:

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR, selectedHour);
calendar.set(Calendar.MINUTE, selectedMinute);

谢谢大家

【问题讨论】:

  • 我理解正确吗?用户输入一天中的某个时间,比如 10:50 — 使用 24 小时制?从中您需要在输入的时间获取今天的日期,例如 2017-09-06 10:50:00 — 对吧?

标签: java android datetime calendar


【解决方案1】:

编辑:看看这个other stackoverflow post,了解为什么人们应该更喜欢使用Java 8 java.time 类而不是CalendarDate

在您的实例中,为了解析“HH:mm”形式的输入,您可以创建一个DateTimeFormatter 并使用静态方法LocalTime.parse(inputString, dateTimeFormatter) 来获取一个LocalTime 对象

例如:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
LocalTime time = LocalTime.parse(timeInputString, formatter);

查看Java documentation for DateTimeFormatter,了解有关年、日或其他模式的更多信息。

如果您想从诸如“10:50”之类的字符串中获取日期和时间,您将无法使用LocalDateTime.parse 方法,因为它无法从“ HH:mm" 字符串。所以解决这个问题的方法是创建LocalTime.parse 的时间,如上所示,然后使用静态方法LocalDate.now(); 获取当前日期,然后使用静态工厂方法@ 将这两个结果组合成一个LocalDateTime 对象987654335@

例如:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
LocalTime time = LocalTime.parse(timeInputString, formatter);
LocalDate date = LocalDate.now();
LocalDateTime dateTime = LocalDateTime.of(date, time);

【讨论】:

  • 很好解释的答案,谢谢。我更愿意将时区传递给LocalDate.now(),使用接受ZoneId 的重载版本,以明确表示我们要求地球上特定地点的今天日期。例如,可以使用ZoneId.of("Africa/Banjul")(替换相关地区和城市)或ZoneId.systemDefault()(使用设备的时区设置)。
  • 您可以将 Java 8 java.time 类与 Android Java 7 一起使用。this question: How to use ThreeTenABP in Android Project 中对此进行了很好的解释。
【解决方案2】:
   Calendar cal = new Calendar.getInstance();// today's date 
 cal.set(Calendar.HOUR, 10);
 cal.set(Calendar.MINUTE, 50);
 cal.set(Calendar.SECOND, 0);
        System.out.println(cal.getTime()); //see the result

现在,由你决定将它们直接放入带有变量的 cal.set 中(不是手动编写 10 ,50 ,这取决于你的创造力)

这个答案是日历,因为您在问题中标记了日历,您还可以使用日历以外的其他东西

【讨论】:

  • 困难在于如何将小时和分钟分配给 cal.set。 10 和 50 只是示例,那些 edittext 值是动态的
  • 你说的是edittext,所以他会在第一个edittext中输入10,然后在第二个中输入50!所以这两个edittext可以与变量相关,然后你使用 set 中的变量。最好的方法是使用现有的时间 api,所以他会选择小时和分钟(所以他不能例如输入:23 小时,70 分钟)然后你用时钟的吸气剂来捕捉它们。
  • 是的,很好的解释。我不得不改变设计。当单击具有 HH:mm 值的编辑文本时,我必须打开 TimePicketDialog 并选择适当的时间。在从 TimePicker 中选择时间时,它会给出所选值的日期时间,所以它有帮助
【解决方案3】:

你只需要使用这个功能。

// hourMintText = "hh:mm"
private String getTodayAsFormat(String hourMintText){
    String[] hourMinAsArray = hourMintText.split(":");
    Calendar calendar = Calendar.getInstance();

    calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hourMinAsArray[0]));
    calendar.set(Calendar.MINUTE, Integer.parseInt(hourMinAsArray[1]));
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm", Locale.ENGLISH);

    return simpleDateFormat.format(calendar.getTimeInMillis());
}

【讨论】:

    【解决方案4】:

    试试这个:

    String dateTime = new SimpleDateFormat("dd-MM-yyyy hh-mm-ss aa", Locale.getDefault())
                            .format(new Date());
    

    【讨论】:

    • 10:50(或用户输入的任何内容)是如何产生的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    相关资源
    最近更新 更多