题目1 --日期
借助随机数,创建一个从1995.1.1 00:00:00 到 1995.12.31 23:59:59 之间的随机日期
package date;
import java.util.Date;
public class TestDate {
public static void main(String[] args) {
long second = 1000;
long minute = 60*second;
long hour = minute * 60;
long day = hour*24;
long year = day * 365;
long year1995Start = (1995-1970) * year;
long leapDay = (1995-1970)/4*day; //每隔4年有一个润日
year1995Start+=leapDay;
long eightHour = hour*8; //8个小时的毫秒数,因为从0毫秒对应的是1970.1.1 08:00:00
year1995Start-=eightHour;
Date dStart = new Date(year1995Start);
System.out.println("1995年第一天:"+dStart);
long year1995End = year1995Start + year - 1;
Date dEnd = new Date(year1995End);
System.out.println("1995年最后一天:"+dEnd);
long randomTime = (long) (Math.random()*(year-1) + year1995Start);
Date dRandom = new Date(randomTime);
System.out.println("1995年这一年中的一个随机时间:" + dRandom);
}
}
笔记
SimpleDateFormat sdf =new SimpleDateFormat("yyyy/MM/dd HH:mm:ss" );
String str = "2016/1/5 12:12:12";
Date d = sdf.parse(str);
字符串对象有一个parse(str) 可以转成Date 对象
Date对象转字符串:
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS" );
Date d= new Date();
String str = sdf.format(d);
题目2--日期格式化
准备一个长度是9的日期数组
使用1970年-2000年之间的随机日期初始化该数组
按照这些日期的时间进行升序排序
比如 1988-1-21 12:33:22 就会排在 1978-4-21 19:07:23 前面,因为它的时间更小,虽然日期更大
package date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDate {
public static void main(String[] args) {
int yearStart = 1970;
int yearEnd = 2000;
Date[] ds = new Date[9];
for (int i = 0; i < ds.length; i++) {
ds[i] = getRandomDate(yearStart, yearEnd);
}
System.out.println("得到的随机日期数组:");
for (int i = 0; i < ds.length; i++) {
System.out.print(toString(ds[i])+" ");
if(2==i%3)
System.out.println();
}
//选择法排序
for (int j = 0; j < ds.length-1; j++) {
for (int i = j+1; i < ds.length; i++) {
String strTimeI = toString(ds[i],"HHmmss");
String strTimeJ = toString(ds[j],"HHmmss");
int lTimeI = Integer.parseInt(strTimeI);
int lTimeJ = Integer.parseInt(strTimeJ);
if( lTimeI<lTimeJ ){
Date temp = ds[j];
ds[j] = ds[i];
ds[i] = temp;
}
}
}
System.out.println("排序后的随机日期数组:");
for (int i = 0; i < ds.length; i++) {
System.out.print(toString(ds[i])+" ");
if(2==i%3)
System.out.println();
}
}
public static String toString(Date d) {
return toString(d, "yyyy-MM-dd HH:mm:ss");
}
public static String toString(Date d, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(d);
}
private static Date getRandomDate(int yearStart, int yearEnd) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
try {
Date dStart = sdf.parse(String.valueOf(yearStart)); // 1970
Date dEnd = sdf.parse(String.valueOf(yearEnd + 1)); // 2001 不是 2000,要在2001的基础上减少以毫秒,才表示2000最后一刻
long timeStart = dStart.getTime();
long timeEnd = dEnd.getTime() - 1;
long timeRandom = (long) (timeStart + Math.random() * (timeEnd - timeStart));
return new Date(timeRandom);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
笔记:可以通过日历对象得到日期对象
//采用单例模式获取日历对象Calendar.getInstance();
Calendar c = Calendar.getInstance();
//通过日历对象得到日期对象
Date d = c.getTime();
日期对象
add方法,在原日期上增加年/月/日
set方法,直接设置年/月/日
题目3--Calendar
找出下个月的倒数第3天是哪天
package date;
import java.text.SimpleDateFormat;
//
import java.util.Calendar;
import java.util.Date;
public class TestDate {
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
System.out.println("今天是:" + format( c.getTime()));
//先翻到下下个月
c.add(Calendar.MONTH,2);
//设置到月初
c.set(Calendar.DATE,1);
//再往回翻3天
c.add(Calendar.DATE,-3);
Exception e;
System.out.println("下个月倒数第三天是:" + format(c.getTime()));
}
private static String format(Date time) {
return sdf.format(time);
}
}