比如有一个时间段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
如何写一个函数得到? 各位指点,最好有个完整的
要得到每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
如何写一个函数得到? 各位指点,最好有个完整的
List res = new ArrayList();
Date d = d1;
while (d 不大于 d2) {
res.add(d);
d = d 加上时间间隔d3;
}
return res;
}差不多应该是这个意思
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();
}
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的需求 可根据实际情况进行修改
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:MM:SS");
如果格式是小写,则12小时制,大写才是24小时制
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个方法就可以了,注意传入的参数
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)
//arg1,开始时间
//arg2,结束时间
//timezone,时间间隔
//内容不想写了,arg1挨个+timezone,小于arg2,然后把结果用List返回就好了
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的单位是毫秒 .已经测试过了
select count(*) from table1 group by to_char(begintime,'dd')按天分
*
* @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 +"です.");
}
}
List ss=gg.getTimeList("2007-8-17 19:40:00", 5, "2007-8-18 19:40:00","yyyy-MM-dd HH:mm:ss");
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
[email protected]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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);
}
}
}
}