java程序接受任何格式的日期作为输入并打印月份,
发布时间:2020-12-15 05:19:39 所属栏目:Java 来源:网络整理
导读:java程序接受任何格式的日期作为输入并打印月份, 可能吗 我尝试了以下,任何其他替代方式/想法? import java.text.*;import java.util.*;public class PrintMonth3{ public static void main(String args[])throws Exception{ String patterns[]={"dd.MM.yyy
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("nt" + mon[m] ); System.exit(0); } catch(Exception e){} } } 解决方法
在合理范围内,是的.这是一个接受各种格式的工作示例.
我假设这样的德语/欧洲格式: 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 注意: 这是概念的快速证明,而不是写这样一个类的认真尝试.这将匹配许多无效格式并忽略许多有效格式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |