这里要实现1981.07.30 格式和July 30.1981格式的日期的转换。

在输入时进行日期格式的识别,并且对字符串进行操作并且输出。

难点在于字符串格式的识别和月份的转换,我用了正则表达式匹配和字符串的裁剪转换为整形再在数组中取出对应月份做的。

字符串进行裁剪时要十分小心。同时,还要注意月份的转换的正确性。哈哈,以前很少使用正则表达式匹配呢。

不多说了,代码更多的是细心的书写,难度也不大。

上代码。

Main.java

package com.fuxuemingzhu.datetransfer.main;

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern; /**
* <p>
* Title: Main
* </p>
* <p>
* Description:根据两种不同的输入日期格式进行判断并且进行转换
* </p>
*
* @author fuxuemingzhu
*
* @email fuxuemingzhu@163.com
*
* @date 2014年11月24日 下午4:19:09
*/
public class Main { /**
* dateInput 输入的日期
*/
public static String dateInput; /**
* dateOutput 输出的日期
*/
public static String dateOutput; /**
* months 12个月份的英文名
*/
public static String[] months = { "January", "February", "March", "April",
"May", "June", "July", "August", "September", "October",
"November", "December" }; /**
* <p>
* Title: main
* </p>
* <p>
* Description:main()方法,程序的入口
* </p>
*
* @param args
*
*/
public static void main(String[] args) {
input();
output();
} /**
* <p>
* Title: input
* </p>
* <p>
* Description:输入需要计算的字符串
* </p>
*
*/
public static void input() {
System.out.println("提示:日期格式有1981.07.30和July 30.1981两种。");
System.out
.println("月的英文输入对照为:January,February,March,April,May,June,July,August,September,October,November,December.");
System.out.println("请输入需要转换的日期:");
Scanner scanner = new Scanner(System.in);
dateInput = scanner.nextLine();
scanner.close();
} /**
* <p>
* Title: judgeType
* </p>
* <p>
* Description:判断输入的日期格式类型,如果两张格式都不满足,则返回2,即输出错误
* </p>
*
* @return 1981.07.30 格式,输出0 July 30.1981格式输出1 错误输出2
*
*/
public static int judgeType() {
Pattern pattern1 = Pattern.compile("\\d{4,}\\.\\d{2,}\\.\\d{2,}");
Matcher matcher1 = pattern1.matcher(dateInput); boolean isMonth = false;
int returnType = 2;
if (matcher1.find()) {
String month = dateInput.substring(5, 7);
int monthInt = Integer.parseInt(month);
if (monthInt <= 12 && monthInt >= 1) {
returnType = 0;
}
} else {
try {
String month = dateInput.split(" ")[0].toString();
for (int i = 0; i < months.length; i++) {
if (months[i].equals(month)) {
isMonth = true;
break;
}
}
String yearAndMonth = dateInput.split(" ")[1].toString();
Pattern pattern2 = Pattern.compile("\\d{2,}\\.\\d{4,}");
Matcher matcher2 = pattern2.matcher(yearAndMonth);
if (isMonth && matcher2.find()) {
returnType = 1;
}
} catch (Exception e) {
returnType = 2;
}
}
return returnType; } /**
* <p>
* Title: num2Words
* </p>
* <p>
* Description:1981.07.30 格式,输出 July 30.1981格式
* </p>
*
* @param numString
* 1981.07.30 格式
*
*/
public static void num2Word(String numString) {
String year = numString.substring(0, 4);
String month = numString.substring(5, 7);
String day = numString.substring(8);
String monthWord = months[Integer.parseInt(month) - 1];
dateOutput = monthWord + " " + day + "." + year;
System.out.println(dateOutput);
} /**
* <p>
* Title: word2Num
* </p>
* <p>
* Description:输入 July 30.1981格式 输出1981.07.30 格式
* </p>
*
* @param wordString
* July 30.1981格式
*
*/
public static void word2Num(String wordString) {
String year = wordString.split(" ")[1].substring(3);
String monthWord = wordString.split(" ")[0].toString();
String day = wordString.split(" ")[1].substring(0, 2);
int monthInt = 0;
for (int i = 0; i < months.length; i++) {
if (months[i].equals(monthWord)) {
monthInt = i + 1;
break;
}
}
dateOutput = year + "." + monthInt + "." + day;
System.out.println(dateOutput);
} /**
* <p>
* Title: output
* </p>
* <p>
* Description:根据不同的日期格式进行输出
* </p>
*
*/
public static void output() {
if (judgeType() == 0) {
num2Word(dateInput);
} else if (judgeType() == 1) {
word2Num(dateInput);
} else {
System.err.println("输入日期有误!请按照提示的格式进行输入。");
}
}
}

正则匹配还是需要继续练一练的。

附上运行截图。

1. July 30.1981格式转为1981.07.30 格式

2. 1981.07.30 格式转为July 30.1981格式

3. 识别输入错误的日期格式

4. 识别输入错误的月份的英语单词

java源码——两种格式日期的转换的更多相关文章

  1. 【JDK命令行 一】手动编译Java源码与执行字节码命令合集(含外部依赖引用)

    写作目标 记录常见的使用javac手动编译Java源码和java手动执行字节码的命令,一方面用于应对 Maven 和 Gradle 暂时无法使用的情况,临时生成class文件(使用自己的jar包):另 ...

  2. Java源码阅读的真实体会(一种学习思路)

    Java源码阅读的真实体会(一种学习思路) 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈 ...

  3. Java 解析Excel(xls、xlsx两种格式)

    Java 解析Excel(xls.xlsx两种格式) 一.环境 JDK 1.8 二.JAR 1.commons-collections4-4.1.jar 2.poi-3.9-20121203.jar ...

  4. Java源码阅读的真实体会(一种学习思路)【转】

    Java源码阅读的真实体会(一种学习思路)   刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+ ...

  5. CTF-源码泄露-PHP备份文件的两种格式

    参考大佬文章: https://www.cnblogs.com/yunqian2017/p/11515443.html https://blog.csdn.net/xy_sunny/article/d ...

  6. 24点扑克牌游戏——(含java源码)(GUI实现)

    给出四个数字,要求,在其间添加运算符和括号,使得计算结果等于24. 括号的放置即为决定哪几个数先进行计算.所以,我们先确定首先进行计算的两个相邻的数,计算完成后,就相当于剩下三个数字,仍需要在它们之间 ...

  7. 如何阅读Java源码 阅读java的真实体会

    刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心.   说到技术基础,我打个比 ...

  8. Android反编译(一)之反编译JAVA源码

    Android反编译(一) 之反编译JAVA源码 [目录] 1.工具 2.反编译步骤 3.实例 4.装X技巧 1.工具 1).dex反编译JAR工具  dex2jar   http://code.go ...

  9. 如何阅读Java源码

    刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动.源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧, ...

随机推荐

  1. 深入理解 OpenFOAM 环境变量与编译

    操作系统选择 由于 OpenFOAM 在 Linux 平台开发和测试,在非 Linux 平台无法直接对软件进行编译和安装,所以在非 Linux 平台上最简便方法是使用 docker 容器运行 Open ...

  2. SPI详解2

    串行外设接口 (SPI) 总线是一种运行于全双工模式下的同步串行数据链路.用于在单个主节点和一个或多个从节点之间交换数据. SPI 总线实施简单,仅使用四条数据信号线和控制信号线(请参见图 1). 图 ...

  3. 学习java 7.9

    学习内容: Date类 Date类常用方法 SimpleDateFormat 1.格式化(从Date到String) public final String format(Date date) 将日期 ...

  4. adjective

    形容词用来描述名词或代词:副词用来描述剩下的(动词.形容词.副词和整句).adverb: to word. Adjectives are used almost exclusively to modi ...

  5. day32 HTML

    day32 HTML 什么是前端 只要是跟用户打交道的界面都可以称之为前端 # eg:电脑界面, 手机界面,平板界面, 什么是后端? eg:python, java,php,go, 不跟用户直接打交道 ...

  6. 【leetcode】43. Multiply Strings(大数相乘)

    Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and ...

  7. GO 总章

    GO 学习资源 go 代理 GO 语言结构 GO 数字运算 GO 时间处理 GO 定时器 GO 异常处理 go recover让崩溃的程序继续执行 GO Exit Fatal panic GO 通过进 ...

  8. my41_主从延迟大排查

    半同步复制 主库执行 INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; SET GLOBAL rpl_semi_sync ...

  9. 【Linux】【Shell】【Basic】数组

    1. 数组:         变量:存储单个元素的内存空间:         数组:存储多个元素的连续的内存空间:             数组名:整个数组只有一个名字:             数组 ...

  10. 用graphviz可视化决策树

    1.安装graphviz. graphviz本身是一个绘图工具软件,下载地址在:http://www.graphviz.org/.如果你是linux,可以用apt-get或者yum的方法安装.如果是w ...