java源码——两种格式日期的转换
这里要实现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源码——两种格式日期的转换的更多相关文章
- 【JDK命令行 一】手动编译Java源码与执行字节码命令合集(含外部依赖引用)
写作目标 记录常见的使用javac手动编译Java源码和java手动执行字节码的命令,一方面用于应对 Maven 和 Gradle 暂时无法使用的情况,临时生成class文件(使用自己的jar包):另 ...
- Java源码阅读的真实体会(一种学习思路)
Java源码阅读的真实体会(一种学习思路) 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈 ...
- Java 解析Excel(xls、xlsx两种格式)
Java 解析Excel(xls.xlsx两种格式) 一.环境 JDK 1.8 二.JAR 1.commons-collections4-4.1.jar 2.poi-3.9-20121203.jar ...
- Java源码阅读的真实体会(一种学习思路)【转】
Java源码阅读的真实体会(一种学习思路) 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+ ...
- CTF-源码泄露-PHP备份文件的两种格式
参考大佬文章: https://www.cnblogs.com/yunqian2017/p/11515443.html https://blog.csdn.net/xy_sunny/article/d ...
- 24点扑克牌游戏——(含java源码)(GUI实现)
给出四个数字,要求,在其间添加运算符和括号,使得计算结果等于24. 括号的放置即为决定哪几个数先进行计算.所以,我们先确定首先进行计算的两个相邻的数,计算完成后,就相当于剩下三个数字,仍需要在它们之间 ...
- 如何阅读Java源码 阅读java的真实体会
刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比 ...
- Android反编译(一)之反编译JAVA源码
Android反编译(一) 之反编译JAVA源码 [目录] 1.工具 2.反编译步骤 3.实例 4.装X技巧 1.工具 1).dex反编译JAR工具 dex2jar http://code.go ...
- 如何阅读Java源码
刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动.源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧, ...
随机推荐
- python15正则表达式
------------恢复内容开始------------ python实现实现实现实现 import re #将表达式编译,返回一个对象, pattern = re.compile(r" ...
- 睡眠或者重启windows,无法ssh连接或者pingVMware的虚机
睡眠后无法直接ssh重连VMware主机问题 这个问题我在win8上出现过,win10看了下同事可以正常连,不知道其他有没有问题. 解决方法: 1.关闭vmnet8和vmnet0里面的 npcap 功 ...
- 在windows下使用shell,运行shell脚本
在Windows操作系统下运行Shell脚本,缺少的只是一个Git软件.其下载路径为Git - Downloading Package. 安装之后,将安装路径下的bin文件夹的路径作为环境变量.于是我 ...
- A Child's History of England.22
CHAPTER 8 ENGLAND UNDER WILLIAM THE FIRST, THE NORMAN CONQUEROR Upon the ground where the brave Haro ...
- 使用微信开放标签<wx-open-launch-weapp>的踩坑日记
最近在完成H5跳转小程序需求时,使用到了微信官方退出的开放标签<wx-open-launch-weapp>,来谈一谈使用的心得和不足. 1.适用环境微信版本要求为:7.0.12及以上. 系 ...
- myatoi
atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数,应用在计算机程序和办公软件中.int atoi(const char *nptr) 函数会扫描参数 nptr字符串 ...
- 循环队列/顺序队列(C++)
队列(queue)是一种限定存取位置的线性变.他允许在表的一端插入,在另一端删除.这个和计算机调度策略中的先来先服务FCFS(First Come/First Served)是一样的.队列中可以插入的 ...
- linux 挂载本地iso
mount -t iso9660 -o loop /mnt/temp/rhel-server-6.5-i386-dvd.iso /mnt/cdrom -t :设备类型 iso9660是指CD-ROM光 ...
- get请求url参数中有+、空格、=、%、&、#等特殊符号的问题解决
url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,如何是好?解决办法将这些字符转化成服务器可以识别的字符,对应关系如下:URL字符转义 用其它 ...
- 使用$.post方式来实现页面的局部刷新功能
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...