Java编写的日期计算方法

自己用Java编写的时间获取类,目前应用在数据交换监控系统中,经测试可以正常使用。

提供以下功能:

Time tt = new Time();
System.out.println("获取昨天日期:" + tt.getyd());
System.out.println("获取当天日期:" + tt.getNowTime("yyyy-MM-dd"));
System.out.println("获取本周一日期:" + tt.getMondayOFWeek());
System.out.println("获取本周日的日期:" + tt.getCurrentWeekday());
System.out.println("获取上周一日期:" + tt.getPreviousWeekday(-1));////----------
System.out.println("获取上周日日期:" + tt.getPreviousWeekSunday(-1));///-------------
System.out.println("获取本月第一天日期:" + tt.getFirstDayOfMonth());
System.out.println("获取本月最后一天日期:" + tt.getDefaultDay());
System.out.println("获取上月第一天日期:" + tt.getPreviousMonthFirst(-1));///------------
System.out.println("获取上月最后一天的日期:" + tt.getPreviousMonthEnd(-1));///---------
System.out.println("前一个小时"+tt.getFixedHour(-1));
System.out.println("前五分钟"+tt.getFixedMinute(-5));
System.out.println("前20秒"+tt.getFixedSecond(-20));
System.out.println("两个日期相差多少天"+tt.daysBetween("2015-07-08","2015-07-10"));
System.out.println(" 计算指定日期的前后几天"+tt.getFixedDayfromDay("2015-07-08",1));

import java.text.Format;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class Time
{
  public static  void main(String[] args) throws ParseException
  {
    Time tt = new Time();
    System.out.println("获取昨天日期:" + tt.getyd());
    System.out.println("获取当天日期:" + tt.getNowTime("yyyy-MM-dd"));
    System.out.println("获取本周一日期:" + tt.getMondayOFWeek());
    System.out.println("获取本周日的日期:" + tt.getCurrentWeekday());
    System.out.println("获取上周一日期:" + tt.getPreviousWeekday(-1));////----------
    System.out.println("获取上周日日期:" + tt.getPreviousWeekSunday(-1));///-------------
    System.out.println("获取本月第一天日期:" + tt.getFirstDayOfMonth());
    System.out.println("获取本月最后一天日期:" + tt.getDefaultDay());
    System.out.println("获取上月第一天日期:" + tt.getPreviousMonthFirst(-1));///------------
    System.out.println("获取上月最后一天的日期:" + tt.getPreviousMonthEnd(-1));///---------
    System.out.println("前一个小时"+tt.getFixedHour(-1));
    System.out.println("前五分钟"+tt.getFixedMinute(-5));
    System.out.println("前20秒"+tt.getFixedSecond(-20));
    System.out.println("两个日期相差多少天"+tt.daysBetween("2015-07-08","2015-07-10"));
    System.out.println(" 计算指定日期的前后几天"+tt.getFixedDayfromDay("2015-07-08",1));

  }

  /**
   * 计算两个日期相差多少天
   * @param smdate
   * 起始日期 yyyy-MM-dd
   * @param bdate
   * 截止日期 yyyy-MM-dd
   * @return
   */
  public  int daysBetween(String smdate,String bdate)  {
      SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
      Calendar cal = Calendar.getInstance();
      try {
        cal.setTime(sdf.parse(smdate));
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
      long time1 = cal.getTimeInMillis();
      try {
        cal.setTime(sdf.parse(bdate));
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
      long time2 = cal.getTimeInMillis();
      long between_days=(time2-time1)/(1000*3600*24);  

     return Integer.parseInt(String.valueOf(between_days));
  }  

  /**
   * 获取sdate这一天是星期几
   * @param sdate
   * @return
   */
  public  String getWeek(String sdate)
  {
    Date date = strToDate(sdate);

    Calendar c = Calendar.getInstance();

    c.setTime(date);

    return new SimpleDateFormat("EEEE").format(c.getTime());
  }

  public  Date strToDate(String strDate)
  {
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

    ParsePosition pos = new ParsePosition(0);

    Date strtodate = formatter.parse(strDate, pos);

    return strtodate;
  }

  /**
   * 获取date1与date2之间天数的差值
   * 当date1在前时,差值为负;当date2在前时,差值为正
   * @param date1
   * @param date2
   * @return
   */
  public  long getDays(String date1, String date2)
  {
    if ((date1 == null) || (date1.equals("")))
    {
      return 0L;
    }
    if ((date2 == null) || (date2.equals("")))
    {
      return 0L;
    }

    SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");

    Date date = null;

    Date mydate = null;
    try
    {
      date = myFormatter.parse(date1);

      mydate = myFormatter.parse(date2);
    }
    catch (Exception localException)
    {
    }

    long day = (date.getTime() - mydate.getTime()) / 86400000L;

    return day;
  }

  /**
   * 获取昨天日期
   * @return
   */
  public String getyd()
  {
    Calendar cal = Calendar.getInstance();
    cal.add(5, -1);
    String yesterday = new SimpleDateFormat("yyyy-MM-dd ").format(cal.getTime());
    return yesterday;
  }

/**
 * 获取本月最后一天日期
 * @return
 */
  public String getDefaultDay()
  {
    String str = "";

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    Calendar lastDate = Calendar.getInstance();

    lastDate.set(5, 1);

    lastDate.add(2, 1);

    lastDate.add(5, -1);

    str = sdf.format(lastDate.getTime());

    return str;
  }

  /**
   * 获取前n月第一天日期,n为负数
   * @return
   */
  public String getPreviousMonthFirst(int n)
  {
    String str = "";

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    Calendar lastDate = Calendar.getInstance();

    lastDate.set(5, 1);

    lastDate.add(Calendar.MONTH, n);

    str = sdf.format(lastDate.getTime());

    return str;
  }

/**
 * "获取本月第一天日期
 * @return
 */
  public String getFirstDayOfMonth()
  {
    String str = "";

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    Calendar lastDate = Calendar.getInstance();

    lastDate.set(5, 1);

    str = sdf.format(lastDate.getTime());

    return str;
  }

/**
 *获取本周日的日期
 * @return
 */
  public String getCurrentWeekday()
  {
    int weeks = 0;

    int mondayPlus = getMondayPlus();

    GregorianCalendar currentDate = new GregorianCalendar();

    currentDate.add(5, mondayPlus + 6);

    Date monday = currentDate.getTime();

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    String preMonday = sdf.format(monday);

    return preMonday;
  }

/**
 * 获取当天日期
 * @param dateformat
 * @return
 */
  public String getNowTime(String dateformat)
  {
    Date now = new Date();

    SimpleDateFormat dateFormat = new SimpleDateFormat(dateformat);

    String hehe = dateFormat.format(now);

    return hehe;
  }

  private int getMondayPlus()
  {
    Calendar cd = Calendar.getInstance();

    int dayOfWeek = cd.get(7) - 1;

    if (dayOfWeek == 1)
    {
      return 0;
    }

    return (1 - dayOfWeek);
  }

/**
 * 获取本周一日期
 * @return
 */
  public String getMondayOFWeek()
  {
    int weeks = 0;

    int mondayPlus = getMondayPlus();

    GregorianCalendar currentDate = new GregorianCalendar();

    currentDate.add(5, mondayPlus);

    Date monday = currentDate.getTime();

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    String preMonday = sdf.format(monday);

    return preMonday;
  }

/**
 * 获取前n周周日日期,n为负数
 * @return
 */
  public String getPreviousWeekSunday(int n)
  {

    int weeks = n;

    int mondayPlus = getMondayPlus();

    GregorianCalendar currentDate = new GregorianCalendar();

    currentDate.add(5, mondayPlus + weeks);

    Date monday = currentDate.getTime();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String preMonday = sdf.format(monday);

    return preMonday;
  }

  /**
   * 获取前n周周一的日期,n为负数
   * @return
   */
  public String getPreviousWeekday(int n)
  {

int weeks=n;

    int mondayPlus = getMondayPlus();

    GregorianCalendar currentDate = new GregorianCalendar();

    currentDate.add(5, mondayPlus + 7 * weeks);

    Date monday = currentDate.getTime();

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    String preMonday = sdf.format(monday);

    return preMonday;
  }

/**
 * 获取前n月最后一天的日期,n为负数
 * @return
 */
  public String getPreviousMonthEnd(int n)
  {
    String str = "";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Calendar lastDate = Calendar.getInstance();
    lastDate.add(2, n);
    lastDate.set(5, 1);
    lastDate.roll(5, -1);
    str = sdf.format(lastDate.getTime());
    return str;
  }

  /**
   * 获取当前日期的前dayCount天的日期
   * @param dayCount
   * @return
   * yyyy-MM-dd
   */
  public  String getFixedDay(int dayCount)
    {
        Format f = new SimpleDateFormat("yyyy-MM-dd");
         Calendar c = Calendar.getInstance();
        // c = day(c, dayCount);
         c.add(Calendar.DATE, dayCount);
         return f.format(c.getTime());
    }

  /**
   * 计算指定日期的前后几天
   * @param day
   * yyyy-MM-dd
   * @param count
   * @return
   * yyyy-MM-dd
   * @throws ParseException
   */
  public String getFixedDayfromDay(String day,int count) throws ParseException
  {

          SimpleDateFormat   sdf=new   SimpleDateFormat( "yyyy-MM-dd");
        Date dt = sdf.parse(day ,new   ParsePosition(0));
        Calendar   rightNow   =   Calendar.getInstance();
        rightNow.setTime(dt);
        rightNow.add(Calendar.DATE,count);//你要加减的日期
        Date   dt1=rightNow.getTime();
        String   reStr=sdf.format(dt1); 

      return reStr;
  }

  /**
   * 获取当前时间的前、后hourCount(小时)的时间
   * @param hourCount
   * @return
   */
  public String getFixedHour(int hourCount)
  {
      Format f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         Calendar c = Calendar.getInstance();
        // c = day(c, dayCount);
         c.add(Calendar.HOUR, hourCount);
         return f.format(c.getTime());
  }

  /**
   * 获取当前时间的前、后minuteCount(分钟)的时间
   * @param minuteCount
   * @return
   */
  public String getFixedMinute(int minuteCount)
  {
      Format f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         Calendar c = Calendar.getInstance();
        // c = day(c, dayCount);
         c.add(Calendar.MINUTE, minuteCount);
         return f.format(c.getTime());
  }

  /**
   * 获取当前时间的前、后secondCount(秒)的时间
   * @param secondCount
   * @return
   */
  public String getFixedSecond(int secondCount)
  {
      Format f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         Calendar c = Calendar.getInstance();
        // c = day(c, dayCount);
         c.add(Calendar.SECOND, secondCount);
         return f.format(c.getTime());
  }
}
时间: 2024-10-14 21:08:27

Java编写的日期计算方法的相关文章

Java 8 时间日期库的20个使用示例

java 8是如何处理时间及日期的 有人问我学习一个新库的最佳途径是什么?我的回答是,就是在实际项目中那样去使用它.在一个真实的项目中会有各种各样的需求,这会促使开发人员去探索和研究这个新库.简言之,只有任务本身才会真正促使你去探索及学习.java 8的新的日期及时间API也是一样.为了学习Java 8的这个新库,这里我创建了20个以任务为导向的例子.我们先从一个简单的任务开始,比如说如何用Java 8的时间日期库来表示今天,接着再进一步生成一个带时间及时区的完整日期,然后再研究下如何完成一些更

Java 8的日期和时间API

本节继续探讨Java 8的新特性,主要是介绍Java 8对日期和时间API的增强,关于日期和时间,我们在之前已经介绍过两节了,32节介绍了Java 1.8以前的日期和时间API,主要的类是Date和Calendar,由于它的设计有一些不足,业界广泛使用的是一个第三方的类库Joda-Time,关于Joda-time,我们在33节进行了介绍.Java 1.8学习了Joda-time,引入了一套新的API,位于包java.time下,本节,我们就来简要介绍这套新的API. 我们先从日期和时间的表示开始

计算机程序的思维逻辑 (95) - Java 8的日期和时间API

?本节继续探讨Java 8的新特性,主要是介绍Java 8对日期和时间API的增强,关于日期和时间,我们在之前已经介绍过两节了,32节介绍了Java 1.8以前的日期和时间API,主要的类是Date和Calendar,由于它的设计有一些不足,业界广泛使用的是一个第三方的类库Joda-Time,关于Joda-time,我们在33节进行了介绍.Java 1.8学习了Joda-time,引入了一套新的API,位于包java.time下,本节,我们就来简要介绍这套新的API. 我们先从日期和时间的表示开

Java 8 时间日期库的20个使用演示样例

除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务演示样例来学习怎样使用Java 8的这套API.Java对日期,日历及时间的处理一直以来都饱受诟病.尤其是它决定将java.util.Date定义为可改动的以及将SimpleDateFormat实现成非线程安全的. 看来Java已经意识到须要为时间及日期功能提供更好的支持了,这对已经习惯使用Joda时间日期库的社区而言也是件好事. 关于这个新的时间日期库的最

教你用java编写计算器(三)

教你用java编写计算器(三) import java.awt.Color; import java.awt.Dimension; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import

java编写Base64密码器

Base64加密算法,应用广泛,尤其是在电子邮件传输上,有很大的用途 用JAVA编写的程序代码如下 import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import javax.swing.JFrame; import javax.s

Java实现时间日期格式转换示例

package com.hanqi.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * 日期转换器 * * @author asus * */ public class DateConvertor { private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd H

java计算两日期间隔小时或分钟

public static void main(String[] args) {        try {            long min = dateDiff("2014-05-27 13:30:00","2014-05-27 13:00:00","yyyy-MM-dd HH:mm:ss");            System.out.println("---------相隔分钟数: "+min);        

Delphi与Java中的日期互换

在最近做的一个项目中用到了Java和Delphi,发现它们不能正确读取对方的日期类型,如在Java中写入一个值为“2007-12-1”的日期值,通过Delphi读取却不是这个值了.通过查阅资料,发现两者对日期类型的定义略有不同.Java中日期使用的是长整型进行存储的,它表示距“1970-1-1”的毫秒数.如“1970-1-2”是在“1970-1-1”后的86400000毫秒,所以Java中就使用86400000表示“1970-1-2”这个日期.由于长整型是带符号的,所以我们可以使用负的毫秒数来表