`

java算法---获取任意一天的前一天

    博客分类:
  • java
 
阅读更多
package com.huifudianxia.interview;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
 * 返回给定日期的前一天
 * @author yangjianzhou
 *
 */
public class Interview {

	public static void main(String[] args) {
		Interview inter = new Interview();
		System.out.println(inter.method1("13-11-2"));
		System.out.println(inter.method2("2013-11-2"));
	}

	/**
	 * 使用java API
	 * @param specifiedDay
	 * @return
	 */
	public  String method1(String specifiedDay){
		Calendar c = Calendar.getInstance();
		Date date = null;
		try{
			date = new SimpleDateFormat("yy-MM-dd").parse(specifiedDay);
		}catch (Exception e) {
			e.printStackTrace();
		}
		c.setTime(date);
		int day = c.get(Calendar.DATE);
		c.set(Calendar.DATE, day-1);
		String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
		return dayBefore;
	}

	/**
	 * 不使用java API
	 * @param specifiedDay
	 * @return
	 */
	public String method2(String specifiedDay){
		String beforeDay = "";
		String [] date = specifiedDay.split("-");
		int year = Integer.parseInt(date[0]);
		int month = Integer.parseInt(date[1]);
		int day = Integer.parseInt(date[2]);
		if(day>1){
			beforeDay = year+"-"+month+"-"+(day-1);
		}else{
			if(month>1){
				day = getDays(month-1,year);
				beforeDay = year+"-"+(month-1)+"-"+day;
			}else{
				year = year -1;
				beforeDay = year+"-"+12+"-"+"31";
			}
		}
		return beforeDay;
	}

	public int getDays(int month,int year){
		int days ;
		switch(month){
		case 1 :
		case 3 :
		case 5 :
		case 7 :
		case 8 :
		case 10 :
		case 12 : days =  31;
		break;
		case 4 :
		case 6 :
		case 9 :
		case 11 : days =30;
		break;
		default :{
			if(isLeap(year)){
				days = 29;
			}else{
				days =28;
			}
		}
		}
		return days;
	}
	/**
	 * 判断是否为闰年
	 * @param year
	 * @return
	 */
	public boolean isLeap(int year){
		if((year%4==0)&&(year%100!=0)){
			return true;
		}else if(year%400==0){
			return true;
		}else{
			return false;
		}
	}
}



运行结果:

2013-11-01
2013-11-1
分享到:
评论

相关推荐

    JAVA面试题最全集

    如何获取某个日期是当月的最后一天 如何格式化日期 5.数组和集合 6.文件和目录(I/O)操作 如何列出某个目录下的所有文件 如何列出某个目录下的所有子目录 判断一个文件或目录是否存在 如何读写文件 7.Java...

    邦仁桶装水软件(送水管理系统)

    特有的外线过滤功能可设置任意外线号码,轻松过滤来电前的外线 9.客户资料的录入 可通过软件快捷键迅速新建客户,对客户的卡号、地址、联系人、开卡日、电话(可 设无数个)、收款方式、片区、月结日、订水频度、...

    易语言程序免安装版下载

    修改BUG:矢量动画支持库中的“矢量编辑框”组件在光标位于组件左上角时按左光标键进入前一行可能会导致显示错误或内存申请失败。 11. 修改BUG:网络传送支持库在使用代理下载时可能会导致程序崩溃。 12. 修改BUG...

    并行计算课程设计(代码+执行文件+文档)

    本次大作业主要是对蒙特·卡罗方法进行并行处理,通过OpenMP、MPI、.NET、Java、Win32API等一系列并行技术和并行机制对该算法进行并行处理,从而也进一步熟悉了蒙特·卡罗方法的串行算法和并行算法,实现了用蒙特·...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的工程师岗位。 其二、技术层次深:如果期望进入IT服务或者产品公司(类似毕博、DELL、IBM等),...

    数据挖掘分析面试题.docx

    三、根据要求写出SQL 表A结构如下: Member_ID (用户的ID,字符型) Log_time (用户访问页面时间,日期型(只有一天的数据)) URL (访问的页面地址,字符型) 要求:提取出每个用户访问的第一个URL(按时间最早...

    并行计算课程设计(报告+代码+可执行文件)

    本次大作业主要是对蒙特·卡罗方法进行并行处理,通过OpenMP、MPI、.NET、Java、Win32API等一系列并行技术和并行机制对该算法进行并行处理,从而也进一步熟悉了蒙特·卡罗方法的串行算法和并行算法,实现了用蒙特·...

    asp.net知识库

    获取數据库表的前N条记录 几段SQL Server语句和存储过程 生成表中的数据的脚本 最详细的SQL注入相关的命令整理 Oracle Oracle中PL/SQL单行函数和组函数详解 mssql+oracle Oracle编程的编码规范及命名规则 Oracle...

    华为编程开发规范与案例

    经过跟踪变量值发现循环变量i的阀值pSysHead->dbf_count的数值为0xFFFFFFFF,该值是从被破坏的内存数据库中获取的,正常情况下该值小于127。而pDBFat是数据库的起始地址,如果pSysHead->dbf_count值异常过大,将...

    手机 pdf 阅读器

    对于大家意见比较大的耗电量的问题,改进阅读时的算法及绘图方式,运算量最高可降至上一版本的2%,平均值为上一版本的6%左右,但由于阅读时耗电量的大头仍然是屏幕发光引起的,因此,只能在一定程序上减少耗电量。...

Global site tag (gtag.js) - Google Analytics