`

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经典算法40例

    - **递归方法**:通过递归函数计算斐波那契数列中的任意一项。这种方法简洁明了,但是效率较低,特别是对于较大的数值时,会重复计算很多次。 ```java public static int f(int x) { if (x == 1 || x == 2) ...

    JAVA经典算法32题

    以下是一些基于给定题目所涉及的Java算法知识点: 1. **斐波那契数列**:程序1展示了斐波那契数列的实现,其中`f(x)`函数使用递归方法计算第`x`个月的兔子数量。斐波那契数列的规律是每个数等于前两个数的和。递归...

    java-万年历课程设计报告.doc

    - 将总天数除以7取余数,余数即代表该日期是一周中的哪一天(0表示星期日)。 #### 5. 系统实现 - **开发环境**: 明确开发过程中使用的开发工具、IDE以及Java版本等信息。 - **关键技术**: 介绍项目实现过程中的...

    java源代码-万年历

    此外,为了使程序能够处理任意年份,开发者需要实现一个算法来生成从公元前到公元后任意一年的日历。这涉及到闰年规则的理解,因为闰年会多出一天。根据格里高利历(公历)规则,能被4整除但不能被100整除的年份,...

    Java程序员面试题大全

    - 查询m大于500且y在前一天当前时间之前的数据,使用SQL:`SELECT * FROM A WHERE m > 500 AND y () - INTERVAL 1 DAY;` - 统计x字段不同情况的个数,以及输出条数大于200的情况:`SELECT COUNT(DISTINCT x) AS ...

    java基础练习题

    ### Java基础知识点解析 #### 1. 整数排序算法 **题目描述**: 编写程序实现对给定的4个整数从大到小的顺序排列。...**题目描述**: 猴子第一天摘下若干个桃子,当时就吃了一半,还不过瘾,就又吃了一个。第二天又将...

    java代码-猴子吃桃子

    在编程世界中,"猴子吃桃子"是一个经典的...在这个问题中,状态是dp[i][j],转移方程是根据前一天的情况更新当前天的状态,边界条件是第0天和第1天的情况。通过这样的方式,我们可以高效地找出猴子吃桃子的最佳策略。

    java第一次作业题目2015版

    不使用Java内置的转换函数,需要自定义算法实现。二进制转换可以采用除2取余法,十六进制则可以除16取余。 7. **回文整数检测**:编写一个函数,判断输入的整数是否为回文数,即正读反读都一样的数。可以将整数转换...

    android java 共用的身份证校验

    - 第14位到第17位是顺序号,用于区分同一天出生的人,奇数分配给男性,偶数分配给女性。 - 最后一位是校验码,可能是0-9中的任意数字或字符X。 2. **校验码计算**: - 校验码的计算涉及到前17位数字,通过一个...

    JAVA闰年的判断

    闰年是公历中的特殊年份,为了保持日历年与地球公转周期的同步,每四年会额外增加一天,即2月29日。这个规则最早由罗马皇帝凯撒大帝在公元前45年引入,后来经过修改和完善,现在普遍采用的是格里高利历(公历)的...

    用MD5算法创建6位数字密码

    这个过程保证了每一天的密码都是唯一的,因为日期和序列号的组合是唯一的,而MD5摘要的选取部分和转换方法确保了数字形式的唯一性。同时,由于MD5的特性,逆向破解这个密码系统将非常困难,因为需要找出原始的输入...

    java入门题目

    注意一年有365天,一个月大约有30天。 #### 题目十五:三个数排序 - **描述**:给出三个数,按从小到大的顺序输出。 - **解析**:可以使用多个条件语句来比较三个数的大小,或者使用排序算法(如冒泡排序)来自动...

    java万年历源代码

    根据提供的文件信息,我们可以分析出这段Java代码实现了一个简单的万年历程序,其主要功能是根据用户输入的年、月、日来计算该日期是一周中的哪一天(星期几)。接下来,我们将对这段代码进行详细解析,并从中提取出...

    50道经典Java逻辑编程题.docx

    - **题目概述**:题目要求输入某年某月某日,判断这一天是这一年的第几天。 - **实现思路**: - 根据年份判断是否为闰年。 - 计算之前每个月的天数总和,加上当月日期。 - 特殊情况处理:如果是闰年且月份大于3月...

    a-date-of-the-year.rar_The Year

    例如,在Python中,我们可以使用`datetime`模块的`date`类来创建一个日期对象,然后使用`weekday()`方法来获取该日期是一周中的哪一天。星期的返回值通常是一个整数,其中0表示周一,1表示周二,以此类推,6表示周日...

    国信蓝桥杯四川赛区2012年java组最后一道大题详解

    4. **字符处理与计算**:利用`charAt()`方法获取`sum`中的每一个字符,判断是否为运算符,如果是,则进行相应的加减运算;如果不是,则将其累加到临时变量中,准备后续的数值转换和运算。 5. **去重与结果输出**:...

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

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

    java程序员招聘面试题

    Java面试题广泛涵盖了基础语法、数据结构、算法、设计模式、框架、并发编程、数据库、网络、操作系统等多个方面。以下是一些常见面试题的解析: **第一组** 1. **烧绳计时问题**:这是一个经典的逻辑题。要计时1...

    用Java程序编写万年历程序的设计报告.doc.doc

    - 月历布局:填充空格以对齐星期,并逐行输出月份内每一天的日期。 **二、程序结构** 程序主要包括以下几个部分: 1. **初始化组件**:创建必要的组件,如文本域(tfYear)用于输入年份,下拉框(monthChoice)...

    万年历的实现

    - 对于GUI,可以设计一个表格布局,每个单元格代表一天,用颜色或标记区分工作日和周末。 6. **用户交互** - 提供用户选择年份和月份的功能,可以通过文本框、下拉菜单或其他UI元素实现。 - 处理用户输入,确保...

Global site tag (gtag.js) - Google Analytics