java程序接受任何格式的日期作为输入并打印月份,
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
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:“接受任何日期格式”(强调我的),包括玛雅日历的格式?