【问题标题】:java.util.Calendarjava.util.日历
【发布时间】:2013-03-29 18:34:13
【问题描述】:

我的申请:

System.out.print("Please enter date (and time): ");
myTask.setWhen(
   input.nextInt(),
   input.nextInt(),
   input.nextInt(),
   input.nextInt(),
   input.nextInt());

我的二传手:

public void setWhen(int year, int month, int date, int hourOfDay, int minute){
    this.year = year;
    this.month = month;
    this.date = date;
    this.hourOfDay = hourOfDay;
    this.minute = minute;

当它准备好让用户输入日期和时间时,它会抛出异常。另外,如果用户输入 4/7/2013 1:30pm 而不是 4、7、2013、13、30,会发生什么? 谢谢。

【问题讨论】:

  • 抛出了什么异常?
  • 您能否添加定义input 的代码,以便我们查看您所做的工作?
  • inputScanner,我相信。问题是关于比较下午 1:30 和 13:30。

标签: java calendar java.util.calendar


【解决方案1】:

代码应该是这样的(只是快速的想法):

System.out.print("Please enter date (and time): ");
String inputText;
Scanner scanner = new Scanner(System.in);
inputText = scanner.nextLine();
scanner.close();
//parse input and parsed put as input parameter for your setwhen() method
setWhen(myOwnParserForInputFromConsole(inputText));

【讨论】:

  • 您需要升职...这有什么帮助?问题是如何写myOwnParserForInputFromConsole
  • 谢谢!我应该在“myOwnParserForInputFromConsole”的位置放什么?
  • 您需要检查输入是否为预期格式 - 这里您需要在线整数。所以实现检查输入是否为整数。
【解决方案2】:

javadocnextInt 抛出“InputMismatchException - 如果下一个标记与整数正则表达式不匹配,或者超出范围”。这意味着你不能盲目地调用nextInt,并希望输入是int

您可能应该将输入读取为 String 并对该输入执行检查以查看其是否有效。

public static void main(String[] args) throws IOException {
    final Scanner scanner = new Scanner(System.in);
    //read year
    final String yearString = scanner.next();
    final int year;
    try {
        year = Integer.parseInt(yearString);
        //example check, pick appropriate bounds
        if(year < 2000 || year > 3000) throw new NumberFormatException("Year not in valid range");
    } catch (NumberFormatException ex) {
        throw new RuntimeException("Failed to parse year.", ex);
    }
    final String monthString = scanner.next();
    final int month;
    try {
        month = Integer.parseInt(monthString);
        //example check, pick appropriate bounds
        if(month < 1 || month > 12) throw new NumberFormatException("Month not in valid range");
    } catch (NumberFormatException ex) {
        throw new RuntimeException("Failed to parse month.", ex);
    }
    //and the rest of the values
}

然后,当您拥有所有输入并且已知它们是有效的,然后调用setWhen

显然,您可以尝试再次读取该数字,而不是抛出异常。

【讨论】:

    【解决方案3】:

    使用标准的另一种方式:

    import java.text.DateFormat;
    import java.text.ParseException;
    import java.util.Calendar;
    import java.util.Date;
    
    public class Calend {
    
       public static void main( String[] args ) throws ParseException {
          Calendar cal = Calendar.getInstance();
          DateFormat formatter =
             DateFormat.getDateTimeInstance(
                DateFormat.FULL, DateFormat.FULL );
          DateFormat scanner;
          Date date;
    
          scanner = DateFormat.getDateTimeInstance(
             DateFormat.SHORT, DateFormat.SHORT );
          date = scanner.parse( "7/4/2013 21:01:05" );
          cal.setTime( date );
          System.out.println( formatter.format( cal.getTime()));
    
          scanner = DateFormat.getDateTimeInstance(
             DateFormat.MEDIUM, DateFormat.MEDIUM );
          date = scanner.parse( "7 avr. 2013 21:01:05" );
          cal.setTime( date );
          System.out.println( formatter.format( cal.getTime()));
    
          scanner = DateFormat.getDateTimeInstance(
             DateFormat.FULL, DateFormat.FULL );
          date = scanner.parse( "dimanche 7 avril 2013 21 h 01 CEST" );
          cal.setTime( date );
          System.out.println( scanner.format( cal.getTime()));
       }
    }
    

    如果你想使用不同的语言环境,它在 DateFormat 中存在一个构造函数来处理它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      • 1970-01-01
      • 2015-06-01
      • 2018-10-23
      • 1970-01-01
      相关资源
      最近更新 更多