java程序接受任何格式的日期作为输入并打印月份,

java程序接受任何格式的日期作为输入并打印月份,,java,Java,java程序接受任何格式的日期作为输入并打印月份 可能吗 我尝试了以下任何其他替代方法/想法 import java.text.*; import java.util.*; public class PrintMonth3{ public static void main(String args[])throws Exception{ String patterns[]={"dd.MM.yyyy","dd.MM.yy","dd.MMM.yyyy","dd.MMM.yy

java程序接受任何格式的日期作为输入并打印月份

可能吗

我尝试了以下任何其他替代方法/想法

import java.text.*;

import java.util.*;


public class PrintMonth3{


    public static void main(String args[])throws Exception{

    String patterns[]={"dd.MM.yyyy","dd.MM.yy","dd.MMM.yyyy","dd.MMM.yy","d.MM.yyyy"};

    String input="4.06.2011";

    for(int i=0;i<patterns.length;i++)
        doPrintMonth(patterns[i],input);

    System.out.println("\nNot a valid date format..");


    }



    public  static void doPrintMonth( String pattern,String input ) {


    try{
    SimpleDateFormat sdf=new SimpleDateFormat(pattern);

    Date output=sdf.parse(input);


    String mon[]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
    int m=output.getMonth();
    System.out.println("\n\t" + mon[m] );
    System.exit(0);
    }
    catch(Exception e){}    


    }


}
import java.text.*;
导入java.util.*;
公共类PrintMonth3{
公共静态void main(字符串args[])引发异常{
字符串模式[]={“dd.MM.yyyy”、“dd.MM.yy”、“dd.MMM.yyy”、“dd.MMM.yy”、“d.MM.yyyy”};
字符串输入=“4.06.2011”;

对于(int i=0;iNo,不是。它如何区分2011年2月1日(dd/MM/yyyy)和2011年2月1日(MM/dd/yyyy)?

No,这是不可能的


<反例:<代码> 10/11/12 < /代码>。这是一个“有效”格式……但月格式是什么?

< p>对于各种格式,是可能的。对于任何格式,都不可能。考虑一下英国VS美国日期的简单问题,例如四月三日或三月四日的03/04/10?

< P>格式是什么,例如。

从技术上讲,它不是什么,但您可以做的是提供一些选项,让用户选择其格式。如果您在GUI中编写此文件,则可能需要使用单选按钮并将其放入单选组中。否则,如果这只是在编译器中使用(如学校程序)然后使用如下的switch语句:

Scanner kbReader = new Scanner(System.in);
String format = kbReader.next();//they might enter mm/dd/yy or any format you want.
switch(format)
{
  case "mm/dd/yy": //do coding here
                      break;
  case "dd/mm/yy": //do coding here
                      break;
}

就像这样,或者您可以使用一系列if-else语句,因为这基本上就是switch语句。

是的,这是一个可以接受多种格式的工作示例

我假设德国/欧洲格式如下:

DD. MM. YYYY HH:MM:SS:MMMM
(这意味着我无法匹配任何月份最先出现的日期格式)

下面是课程:

public class VariableDateParser {

    private static final Pattern DATE_PATTERN = Pattern
    .compile("((?:(?:\\d+(?:[./]\\s*)?)+)?)\\s*((?:(?:\\d+[:]?)+)?)");

    public Date getDate(final String dateString) {
        final Calendar calendar = Calendar.getInstance();
        final Matcher matcher = DATE_PATTERN.matcher(dateString);
        if (matcher.matches()) {
            final String dateGroup = matcher.group(1).trim();
            if (!"".equals(dateGroup)) {
                final Iterator<Integer> fields = Arrays.asList(
                    Calendar.DATE, Calendar.MONTH, Calendar.YEAR).iterator();
                final String[] items = dateGroup.split("\\D+");
                for (final String item : items) {
                    if ("".equals(item))
                        break;
                    else if (fields.hasNext()) {
                        final Integer field = fields.next();
                        calendar.set(field, Integer.parseInt(item) -
                           // months are 0-based, grrrr!!!
                           (field.equals(Calendar.MONTH) ? 1 : 0));
                    } else {
                        throw new IllegalArgumentException(
                            "Bad date part: " + dateGroup);
                    }
                }
            }
            final String timeGroup = matcher.group(2).trim();
            if (!"".equals(timeGroup)) {
                final Iterator<Integer> fields = Arrays.asList(
                    Calendar.HOUR, Calendar.MINUTE, Calendar.SECOND,
                    Calendar.MILLISECOND).iterator();
                final String[] items = timeGroup.split("\\D+");
                for (final String item : items) {
                    if ("".equals(item))
                        break;
                    else if (fields.hasNext()) {
                        final Integer field = fields.next();
                        calendar.set(field, Integer.parseInt(item));
                    } else {
                        throw new IllegalArgumentException(
                            "Bad time part: " + timeGroup);
                    }
                }
            }

        } else
            throw new IllegalArgumentException(
                "Bad date string: " + dateString);
        return calendar.getTime();
    }

}
输出:

public static void main(final String[] args) {
    VariableDateParser parser = new VariableDateParser();
    DateFormat df = DateFormat.getDateTimeInstance(
        DateFormat.MEDIUM, DateFormat.LONG, Locale.GERMAN);
    System.out.println(df.format(parser.getDate("11")));
    System.out.println(df.format(parser.getDate("11. 10.")));
    System.out.println(df.format(parser.getDate("11. 10. 4")));
    System.out.println(df.format(parser.getDate("11. 10. 2004")));
    System.out.println(df.format(parser.getDate("11. 10. 2004 11")));
    System.out.println(df.format(parser.getDate("11. 10. 2004 11:35")));
    System.out.println(df.format(parser.getDate("11. 10. 2004 11:35:18")));
    System.out.println(df.format(parser.getDate("11. 10. 2004 11:35:18:123")));
    System.out.println(df.format(parser.getDate("11:35")));
    System.out.println(df.format(parser.getDate("11:35:18")));
    System.out.println(df.format(parser.getDate("11:35:18:123")));
}
11.05.2011 15:57:24 MESZ
11.10.2011 15:57:24 MESZ
11.10.0004 15:57:24 MEZ
11.10.2004 15:57:24 MESZ
11.10.2004 23:57:24 MESZ
11.10.2004 23:35:24 MESZ
11.10.2004 23:35:18 MESZ
11.10.2004 23:35:18 MESZ
01.05.2011 13:35:24 MESZ
01.05.2011 13:35:18 MESZ
01.05.2011 13:35:18 MESZ
注意:

public static void main(final String[] args) {
    VariableDateParser parser = new VariableDateParser();
    DateFormat df = DateFormat.getDateTimeInstance(
        DateFormat.MEDIUM, DateFormat.LONG, Locale.GERMAN);
    System.out.println(df.format(parser.getDate("11")));
    System.out.println(df.format(parser.getDate("11. 10.")));
    System.out.println(df.format(parser.getDate("11. 10. 4")));
    System.out.println(df.format(parser.getDate("11. 10. 2004")));
    System.out.println(df.format(parser.getDate("11. 10. 2004 11")));
    System.out.println(df.format(parser.getDate("11. 10. 2004 11:35")));
    System.out.println(df.format(parser.getDate("11. 10. 2004 11:35:18")));
    System.out.println(df.format(parser.getDate("11. 10. 2004 11:35:18:123")));
    System.out.println(df.format(parser.getDate("11:35")));
    System.out.println(df.format(parser.getDate("11:35:18")));
    System.out.println(df.format(parser.getDate("11:35:18:123")));
}
11.05.2011 15:57:24 MESZ
11.10.2011 15:57:24 MESZ
11.10.0004 15:57:24 MEZ
11.10.2004 15:57:24 MESZ
11.10.2004 23:57:24 MESZ
11.10.2004 23:35:24 MESZ
11.10.2004 23:35:18 MESZ
11.10.2004 23:35:18 MESZ
01.05.2011 13:35:24 MESZ
01.05.2011 13:35:18 MESZ
01.05.2011 13:35:18 MESZ

这是一个概念的快速证明,不是编写这样一个类的认真尝试。这将匹配许多无效格式,而忽略许多有效格式。

+1:我想你的意思是,如何区分
01/02/03
02/01/03
03/02/01
;)需要考虑的其他格式:01.02.03、030201、01-02-03…以及其他许多格式。人们甚至可以使用“stardate”或任何其他方式来表示日期:)不。这种差异就涵盖了大多数数字格式。其他格式使用月份的名称或缩写,这些名称或缩写随语言而异。您想做什么?y是什么我们在这个问题背后的想法?我在面试中被要求回答这个问题。我的面试官给了我一个线索,我可以使用SimpleDateFormata,这是一个面试问题。我想面试官可能想让你谈谈需要指定日期的模式,也可能是关于地点等。五个答案没有人提到Jodati我?我很震惊。@user617597:“接受任何日期格式”(强调我的),包括玛雅日历的格式?