比如有一个时间段2007-08-21 12:20到 2007-08-22 12:20
要得到每5分钟的时间段如:2007-08-21 12:20 2007-08-21 12:25 2007-08-21 12:30  
要得到每1小时的时间段如:2007-08-21 12 2007-08-21 13 2007-08-21 14  
要得到每天的时间段如:2007-08-21  2007-08-22   
如何写一个函数得到? 各位指点,最好有个完整的

解决方案 »

  1.   

    参考一下calendar类吧,,应该有这种方法。
      

  2.   

    JAVA的Calendar类中有个add方法,你可以参考一下写个函数
      

  3.   

    calendar里面有个add方法,你可以在最小的时间上面做加法,不超过最大时间的都是满足条件的。很简单
      

  4.   

    add添加进去之后,如何取出时间来?
      

  5.   

    如果不嫌麻烦可以使用get(field)方法把每个域取出来组装一下就好了
      

  6.   

    pulbic List test(d1, d2, d3) {
    List res = new ArrayList();
    Date d = d1;
    while (d 不大于 d2) {
        res.add(d);
        d = d 加上时间间隔d3;
    }
    return res;
    }差不多应该是这个意思
      

  7.   

    时间相加按lovingprince()所说,查查javadoc
      

  8.   

    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    String s1 = "2006-12-1 12:00:00";
    String s2 = "2006-12-1 12:30:00";
    long tt = 5;
    try {
    Date date1 = df.parse(s1);
    Date date2 = df.parse(s2);
    long quot = 0;
    int i = 1; while (quot < date2.getTime()) {
    quot = date1.getTime() + tt * i * 1000 * 60;
    Date date3 = new Date(quot); System.out.println(df.format(date3));
    i++;
    } } catch (ParseException e) {
    e.printStackTrace();
    }
      

  9.   

    public String getNextDate(String sDate, int iDate,int iCal, String sStr){
            String sNextDate = "";
            Calendar calendar = Calendar.getInstance();
            SimpleDateFormat formatter = new SimpleDateFormat(sStr);
            Date date = null;
            try {
                date = formatter.parse(sDate);
            } catch (ParseException e) {
       e.printStackTrace();
            }
            calendar.setTime(date);
            calendar.add(iCal, iDate);
            sNextDate = formatter.format(calendar.getTime());
            return sNextDate ;
        }
    此函数实现:  指定日期后的某多个时间段的日期
    其中sDate为指定日期,iDate为多少时间段(可以是 年、月、日...  具体根据iCal来确定)
    iCal为某种时间段例如  月:Calendar.DATE(具体可查询api中Calendar类)
    sStr为日期格式 例如:"yyyyMMdd"(具体可查询api中Calendar类)这个是我刚写的  具体能否满足lz的需求 可根据实际情况进行修改
      

  10.   

    修正一下  其中iCal的例子应该是 月:Calendar.MONTH
      

  11.   

    更正一下自己的代码,
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:MM:SS");
    如果格式是小写,则12小时制,大写才是24小时制
      

  12.   

    baobao28(瓜瓜)  改成大写 循环很多不符合条件的出来了,你看看
      

  13.   

    自己写了个 
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Date;public class GetTime {
    Calendar  startCalendar = Calendar.getInstance();
    Calendar  endCalendar = Calendar.getInstance();
    DateFormat format = DateFormat.getInstance(); 
    Date startDate = null;
    Date endDate = null;

    /**
     * 
     * @param startTime 开始时间
     * @param i 间隔的时间段(以毫秒为单位)
     * @param endTime 结素时间
     * @return
     */
    public ArrayList getTimeList(String startTime,long i,String endTime){
    ArrayList timeList = new ArrayList();
    try {
    startDate = format.parse(startTime);
    endDate = format.parse(startTime);
    } catch (ParseException e) {
    e.printStackTrace();
    return timeList;
    }
    startCalendar.setTime(startDate);
    endCalendar.setTime(endDate);

    long startMill = startCalendar.getTimeInMillis();
    long endMill = endCalendar.getTimeInMillis();

    while(startMill<=endMill){
    startMill += i;
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(startMill);
    timeList.add(dateTimeString(calendar));
    }

    return timeList;
    }

    /**
     * 格式化日期和时间
     * @return 格式为 YYYY-MM-DD HH:MI:SS
     */
    public String dateTimeString(Calendar calendar) {
    String time = null;

    int year = calendar.get(Calendar.YEAR);
            int month = calendar.get(Calendar.MONTH) + 1;
            int day = calendar.get(Calendar.DATE);
            int hour = calendar.get(Calendar.HOUR_OF_DAY);
            int minute = calendar.get(Calendar.MINUTE);
            int second = calendar.get(Calendar.SECOND);
            
            String yearStr = Integer.toString(year);
            String monthStr = Integer.toString(month);
            String dayStr = Integer.toString(day);
            String hourStr = Integer.toString(hour);
            String minuteStr = Integer.toString(minute);
            String secondStr = Integer.toString(second);
            
            if (monthStr.length() == 1) {
                monthStr = "0" + monthStr;
            } 
            
            if (dayStr.length() == 1) {
                dayStr = "0" + dayStr;
            }
            
            if (hourStr.length() == 1) {
             hourStr = "0" + hourStr;
            }
            
            if (minuteStr.length() == 1) {
             minuteStr = "0" + minuteStr;
            }
            
            if (secondStr.length() == 1) {
             secondStr = "0" + secondStr;
            }
            
            time = yearStr + "-" + monthStr + "-" + dayStr 
            + " " + hourStr + ":" + minuteStr + ":" + secondStr;

    return time;
    }
    }
    调用第1个方法就可以了,注意传入的参数
      

  14.   

    TERRY_IORIvsKYO()  
                       GetTime gg=new GetTime();
    gg.getTimeList("2006-12-01 12:10:00", 5, "2006-12-01 13:30:00");报错:java.text.ParseException: Unparseable date: "2006-12-1 12:10:00"
    at java.text.DateFormat.parse(DateFormat.java:335)
    at com.leadtone.gegw.snmpfile.timer.GetTime.getTimeList(GetTime.java:35)
    at com.leadtone.gegw.snmpfile.timer.GetTime.main(GetTime.java:23)
      

  15.   

    sorry  我知道了 看看
      

  16.   

    TERRY_IORIvsKYO() 你这个方法得到不是想要数据, List ss=gg.getTimeList("2007-8-17 19:40:00", 5, "2007-8-18 19:40:00"); 得到还是2007-8-17 19:40:00,而且只有一条记录
      

  17.   

    baobao28(瓜瓜) 去哪里了,有QQ吗?你写的那个方法改成大写循环很多不符合条件的出来了连2008年的都出来了,555
      

  18.   

    public List getTimeArea(String arg1,String arg2,String timezone)
    //arg1,开始时间
    //arg2,结束时间
    //timezone,时间间隔
    //内容不想写了,arg1挨个+timezone,小于arg2,然后把结果用List返回就好了
      

  19.   

    public GetTime(int startyear, int startmonth, int startdate, int starthour, int startminute,
    int endyear, int endmonth, int enddate, int endhourOfDay, int endminute){
    startCalendar.set(startyear,startmonth,startdate,starthour,startminute);
    endCalendar.set(endyear,endmonth,enddate,endhourOfDay,endminute);
    }

    /**
     * 
     * @param startTime 开始时间
     * @param i 间隔的时间段(以毫秒为单位)
     * @param endTime 结素时间
     * @return
     */
    ArrayList getTimeList(long i){
    ArrayList timeList = new ArrayList();

    long startMill = startCalendar.getTimeInMillis();
    long endMill = endCalendar.getTimeInMillis();

    while(startMill<=endMill){
    startMill += i;
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(startMill);
    timeList.add(dateTimeString(calendar));
    }

    return timeList;
    }
    虽然这样初始化有点麻烦
    i的单位是毫秒 .已经测试过了
      

  20.   

    在数据库里操作比较好吧select count(*) from table1 group by to_char(begintime,'hh24')按小时分
    select count(*) from table1 group by to_char(begintime,'dd')按天分
      

  21.   

    /**
     * 
     * @param strDate 時間、格式(yyyy-MM-dd HH:mm:ss)
     * @param sub 間隔 秒
     * @throws Exception 異常 例外
     */
    private static void test13(String strDate, int sub) throws Exception {
                if (sub > 0) {
                    SimpleDateFormat objFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    Date date = objFormat.parse(strDate);
                    Calendar cal = Calendar.getInstance();
                    cal.setTime(date);
                    long start = cal.getTimeInMillis();
                    cal.add(Calendar.DAY_OF_YEAR, 1);//一日
                    long end = cal.getTimeInMillis();
                    for (long i = start; i <= end; i += (sub*1000)) {
                    cal.setTimeInMillis(i);
                    System.out.println(objFormat.format(cal.getTime());
                }
            } else {
                System.out.println("この数値は"+ sub +"です.");
            }
        }
      

  22.   

    建议再加传一个“传入日期格式”的字符参数。以免造成“java.text.ParseException: Unparseable date”这样的异常。如:
    List ss=gg.getTimeList("2007-8-17 19:40:00", 5, "2007-8-18 19:40:00","yyyy-MM-dd HH:mm:ss");
      

  23.   

    键盘大小写忘记切换了,这次的格式化格式是正确的了
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      

  24.   

    一个坏习惯,几乎不看重复贴
    [email protected]
      

  25.   

    最讨厌在题目前加<美女MM>.......
      

  26.   

    C#实现如下:
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    using System;
    using System.Collections;
    using System.Text;namespace SplitTime
    {
        /**
        * 问题描述:
        *     比如有一个时间段2007-08-21 12:20到 2007-08-25 12:20
        * 要得到每5分钟的时间段如:2007-08-21 12:20  2007-08-21 12:25  2007-08-21 12:30  
        * 要得到每1小时的时间段如:2007-08-21 12     2007-08-21 13     2007-08-21 14  
        * 要得到每天的时间段如:   2007-08-21        2007-08-22   
        **/
        class Program2
        {
            /// <summary>
            /// 本枚举代表时间的不同的单位.
            /// </summary>
            public enum TimeUnit
            { 
                minute,//代表分钟.
                hour,  //代表小时.
                day    //代表天.
            }        /// <summary>
            /// 本方法将指定的时间段,按指定的小时数分割多个时间点.
            /// </summary>
            /// <param name="beginTime">时间段的开始时间</param>
            /// <param name="endTime">时间段的结束时间</param>
            /// <param name="timeUnit">时间间隔数的单位</param>
            /// <param name="timeDistance">时间间隔数</param>
            /// <returns>时间段分隔后的有序时间字符串集合</returns>
            public ArrayList SplitTime(DateTime beginTime
                                        , DateTime endTime
                                        , TimeUnit timeUnit
                                        , int timeDistance)
            {
                //确保正确的时间段,保证开始时间早于结束时间.
                if (beginTime >= endTime)
                {
                    Console.WriteLine("开始时间要早于结束时间!");
                    return null;
                }            //动态数组用于存储分隔后的时间字符串对象集合.
                ArrayList timeContainer = new ArrayList();            //根据参数中指定的不同的时间间隔单位, 执行不同的代码块.
                switch(timeUnit)
                {
                    case TimeUnit.minute:
                        do
                        {
                            timeContainer.Add(beginTime.ToString("yyyy-MM-dd HH:mm"));
                            //在'分钟'上添加时间间隔数.
                            beginTime = beginTime.AddMinutes(timeDistance);
                        } while (beginTime <= endTime);
                        break;
                    case TimeUnit.hour:
                        do
                        {
                            timeContainer.Add(beginTime.ToString("yyyy-MM-dd HH"));
                            //在'小时'上添加时间间隔数.
                            beginTime = beginTime.AddHours(timeDistance);
                        } while (beginTime <= endTime);
                        break;
                    case TimeUnit.day:
                        do
                        {
                            timeContainer.Add(beginTime.ToString("yyyy-MM-dd"));
                            //在'天'上添加时间间隔数.
                            beginTime = beginTime.AddDays(timeDistance);
                        } while (beginTime <= endTime);
                        break;
                    default:
                        break;
                }            //返回时间对象集合.
                return timeContainer;
            }        /// <summary>
            /// 运行时间分隔函数.
            /// </summary>
            public void RunSplitTime()
            {
                /**
                 * 第一:
                 * */
                //格式控制.
                Console.Write(DateTime.Now);
                Console.Write("--");
                Console.Write(DateTime.Now.AddDays(5));
                Console.WriteLine("\n======================================================");            //调用时间段分隔方法.
                ArrayList timeList = this.SplitTime(DateTime.Now
                                        , DateTime.Now.AddDays(5)
                                        , TimeUnit.minute
                                        , 100);            //项参数有误,则动态数组的值为null.
                if (timeList == null)
                {
                    return;
                }            //将有序时间字符串打印出来.
                for (int i = 0; i < timeList.Count; i++)
                {
                    string time = (string)timeList[i];
                    Console.WriteLine((i+1).ToString()+".  "+time);
                }            /**
                * 第二:
                * */
                //格式控制.
                Console.Write(DateTime.Now);
                Console.Write("--");
                Console.Write(DateTime.Now.AddDays(5));
                Console.WriteLine("\n======================================================");            //调用时间段分隔方法.
                timeList = this.SplitTime(DateTime.Now
                                        , DateTime.Now.AddDays(5)
                                        , TimeUnit.hour
                                        , 10);            //项参数有误,则动态数组的值为null.
                if (timeList == null)
                {
                    return;
                }            //将有序时间字符串打印出来.
                for (int i = 0; i < timeList.Count; i++)
                {
                    string time = (string)timeList[i];
                    Console.WriteLine((i + 1).ToString() + ".  " + time);
                }            /**
                * 第三:
                **/
                //格式控制.
                Console.Write(DateTime.Now);
                Console.Write("--");
                Console.Write(DateTime.Now.AddDays(5));
                Console.WriteLine("\n======================================================");            //调用时间段分隔方法.
                timeList = this.SplitTime(DateTime.Now
                                        , DateTime.Now.AddDays(5)
                                        , TimeUnit.day
                                        , 1);            //项参数有误,则动态数组的值为null.
                if (timeList == null)
                {
                    return;
                }            //将有序时间字符串打印出来.
                for (int i = 0; i < timeList.Count; i++)
                {
                    string time = (string)timeList[i];
                    Console.WriteLine((i + 1).ToString() + ".  " + time);
                }            
            }
        }
    }