【问题标题】:Calculating Fridays on 13th between two dates separated by a space在以空格分隔的两个日期之间计算 13 日的星期五
【发布时间】:2015-11-26 07:05:51
【问题描述】:
Date startdate=new Date();
Date enddate=new Date();
DateFormat format = new SimpleDateFormat("dd MM yyyy",Locale.US);


Scanner scanner = new Scanner(System.in);    
String line = scanner.nextLine();
String line1 = scanner.nextLine();

try{
    startdate = format.parse(line);
} 
 catch(ParseException e){
    System.out.println("Sorry!!");
}

try {
    enddate = format.parse(line1);
} 
catch(ParseException e){
    System.out.println("Sorry!!");
}

如果我的日期分两行给出,我的代码可以正常工作。但我想让它在以空格分隔的同一行中输入(两个日期之间以及日月年之间(每个日期的 DD MM YYYY 格式))。

输入如:01 01 2015 10 10 2015

我需要分别在 startdate 和 enddate 中扫描这两个日期。我该怎么做?

【问题讨论】:

  • 嗯,你的问题更多的是关于拆分字符串而不是计算天数,所以我会调整它。至于您的问题:拆分字符串,然后将每个部分传递给日期格式进行解析。如果您知道长度,可以使用substring 进行拆分,如果您只知道要查找的格式,则可以使用正则表达式。
  • 您的程序没有显示“13 日星期五”的迹象,但它确实要求输入位于 两行(两次调用 nextLine())和 @987654324 @ 是单行文本。
  • 谢谢大家!!我现在解决了!!抱歉,由于我的代表,我无法 +1 :(

标签: java date


【解决方案1】:

你可以使用substring

  String Str = new String("01 01 2015 10 10 2015");

  System.out.println(Str.substring(11) );   // 10 10 2015

  System.out.println(Str.substring(0, 10) );  // 01 01 2015

【讨论】:

    【解决方案2】:

    这是有关如何执行此操作的指南。我希望您编写自己的代码。

    • 将输入转换为字符串。 (一行包含两个日期)
    • 在中间的空格处分割字符串。
    • 然后将每个部分提供给format.parse();

    【讨论】:

      【解决方案3】:

      如果您不知道字符串的确切长度,即可以将 2015 年 1 月 1 日也传递为 1 1 2015 或介于两者之间的其他字符(例如多个空格),请尝试使用正则表达式:

      String input = "1 1 2015   10 10 2015";
      
      SimpleDateFormat f = new SimpleDateFormat("dd MM yyyy");
      
      Pattern p = Pattern.compile( "[0-9]{1,2} [0-9]{1,2} [0-9]{4}" );
      Matcher m = p.matcher( input );
      
      while( m.find() )
      {
        System.out.println( f.parse( m.group() ) );
      }
      

      表达式的简短分解:

      • [0-9]{1,2} 表示一个或两个 ascii 数字(\d 也可以匹配非 ascii 数字)
      • [0-9]{4} 表示正好四个 ascii 数字
      • 数字组由一个空格分隔,即它们与粗略模式 x y z 匹配,并且中间有多个空格的任何输入都不匹配。

      【讨论】:

        【解决方案4】:

        好吧,将 1 对 1 直接指向您的代码。你应该这样做。

            Scanner scanner = new Scanner(System.in);    
            String line = scanner.nextLine();
            Pattern pattern = Pattern.compile("[0-9]{1,2}\\s+[0-9]{1,2}\\s+[0-9]{4}");
            Matcher m = pattern.matcher(line);
        
            String d1 = null;
            String d2 = null;
        
            DateFormat format = new SimpleDateFormat("dd MM yyyy",Locale.US);
        
            Date startDate = null;
            Date endDate = null;
        
            try {
                if(m.find()) {
                    d1 = m.group();
                    startDate = format.parse(d1);
                } else {
                    System.out.println("Sorry for date 1.");
                }
                if(m.find()) {
                    d2 = m.group();
                    endDate = format.parse(d2);
                } else {
                    System.out.println("Sorry for date 2.");
                }
            } catch (ParseException e) {
                System.out.println("Incorrect date format");
            }
        

        【讨论】:

          猜你喜欢
          • 2013-03-30
          • 2011-06-25
          • 1970-01-01
          • 2010-10-07
          • 2015-10-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-26
          相关资源
          最近更新 更多