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),不禁又有一种激动.源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧, ...
随机推荐
- cookie的生命周期、访问限制、作用域、prefixes
cookie的生命周期 cookie的生命周期可以通过两种方式定义: 会话期cookie是最简单的cookie:浏览器关闭后会被自动删除.会话期cookie不需要指定过期时间(Expires)或者有效 ...
- mVISTA 多序列比对叶绿体基因组
mVISTA可对2个或者多个DNA序列进行比较,可以对比对结果进行可视化. 详情请大力戳这里 0 输入文件说明 mVISTA 需要输入的文件有如下几类 必须文件 邮箱 fasta格式序列文件(或者GE ...
- 解决Package is not available (for R version XXX)?
目录 1. 更新R(不推荐) 2. 更改或指定镜像源 3.源码安装 安装R包时这个错误是经常见到的.我认为有几个方法可解决,记录之. 1. 更新R(不推荐) 简单粗暴的方法就是更新R,但这波及的范围太 ...
- python的包与模块
win +R d
- C语言之内核中的struct list_head 结构体
以下地址文章解释很好 http://blog.chinaunix.net/uid-27122224-id-3277511.html 对下面的结构体分析 1 struct person 2 { 3 in ...
- SpringBoot Profiles 多环境配置及切换
目录 前言 默认环境配置 多环境配置 多环境切换 小结 前言 大部分情况下,我们开发的产品应用都会根据不同的目的,支持运行在不同的环境(Profile)下,比如: 开发环境(dev) 测试环境(tes ...
- 一文搞懂指标采集利器 Telegraf
作者| 姜闻名 来源|尔达 Erda 公众号 导读:为了让大家更好的了解 MSP 中 APM 系统的设计实现,我们决定编写一个<详聊微服务观测>系列文章,深入 APM 系统的产品.架构 ...
- Node.js 概述
JavaScript 标准参考教程(alpha) 草稿二:Node.js Node.js 概述 GitHub TOP Node.js 概述 来自<JavaScript 标准参考教程(alpha) ...
- 【leetcode】208. Implement Trie (Prefix Tree 字典树)
A trie (pronounced as "try") or prefix tree is a tree data structure used to efficiently s ...
- JAVA中的六种日期类型使用
基本的6种日期类 /** * 六种时间类型的类 * 数据库格式的时间三种格式 */ java.util.Date date = new java.util.Date();//年与日时分秒 //数据库的 ...