/**
* 获取指定时间戳所在日期的零点时间戳
* @param millis
* @return
*/
public static long getDayZeroTimeInMillis(long millis){
Calendar c = Calendar.getInstance();
c.setTimeInMillis(millis);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
return c.getTimeInMillis();
}
@Test
public void getDayZeroTimeInMillisTest() {
System.out.println(System.currentTimeMillis());//1466388480064 当前系统时间
System.out.println(getDayZeroTimeInMillis(System.currentTimeMillis()));//1466352000000 当天凌晨时间点
}
/**
* 返回n天后/前的日期时间戳[零点时间戳]
* @param days
* 可以为任何整数,负数表示前N天,正数表示后N天
* @return TimeInMillis
*/
public static long getFutureInMillis(long current, int days) {
current = current > 0 ? current : System.currentTimeMillis();
Calendar c = Calendar.getInstance();
c.setTimeInMillis(current);
c.set(Calendar.DAY_OF_MONTH, c.get(Calendar.DAY_OF_MONTH) + days);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
return c.getTimeInMillis();
}
@Test
public void testFutureInMillis() throws Exception {
System.out.println(getFutureInMillis(System.currentTimeMillis(), -1));
}
/**
* 将时间戳转换为格式化的字符串
*
* @param format
* @param millis
* @return
*/
public static String getDateString(String format, long millis) {
Date date = new Date(millis);
if (isEmptyString(format))
format = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat dateFormat = new SimpleDateFormat(format);
return dateFormat.format(date);
}
@Test
public void testGetDateString() {
System.out.println(getDateString("yyyy-MM-dd HH:mm:ss", 1466388294000L));//2016-06-20 10:04:54
}
mysteel
package com.mysteel.mobile.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import com.mysteel.mobile.entity.DesignOpRead;
public class DateUtil {
//遍历时间段中所有的日期
public static List<Date> getAllDateInRange(Date startDate, Date endDate){
List<Date> dateList = new ArrayList<Date>();
if (startDate.before(endDate)){
Long spi = endDate.getTime() - startDate.getTime();
Long step = spi / (24 * 60 * 60 * 1000);// 相隔天数
dateList.add(endDate);
for (int i = 1; i <= step; i++) {
dateList.add(new Date(dateList.get(i - 1).getTime()
- (24 * 60 * 60 * 1000)));// 比上一天减一
}
}
return dateList;
}
public static List<String> getAllDateStrInRange(String startDate, String endDate, String dateType)
throws Exception {
Long oneDay = 1000 * 60 * 60 * 24l;
List<String> resultList = new ArrayList<String>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat yearSdf = new SimpleDateFormat("yyyy");
Date st = sdf.parse(startDate);
Date et = sdf.parse(endDate);
if (dateType.equals("week")) {
long startTime = st.getTime();
long endTime = et.getTime();
while (startTime <= endTime + (7 * oneDay)) {
Date date = new Date(startTime);
DateTime jodaTime = new DateTime(date);
int currWeek = jodaTime.getWeekOfWeekyear();
if (currWeek < 10) {
resultList.add(jodaTime.getYear() + "0" + currWeek + "");
} else {
resultList.add(jodaTime.getYear() + "" + currWeek + "");
}
startTime = jodaTime.plusWeeks(1).getMillis();
}
} else if (dateType.equals("month")) {
long startTime = st.getTime();
long endTime = et.getTime();
int month = 0;
while (startTime <= endTime) {
Date date = new Date(startTime);
DateTime jodaTime = new DateTime(date);
// TODO
int currMonth = jodaTime.getMonthOfYear();
if (month != currMonth) {
if ((currMonth + 1) <= 10) {
resultList.add(jodaTime.getYear() + "0" + (currMonth));
} else {
resultList.add(jodaTime.getYear() + "" + (currMonth) + "");
}
}
startTime = jodaTime.plusMonths(1).getMillis();
}
} else {
long startTime = st.getTime();
long endTime = et.getTime();
while (startTime <= endTime) {
Date d = new Date(startTime);
//TODO YYYY-MM-DD 改 YYYYMMDD
resultList.add(sdf2.format(d));
startTime += oneDay;
}
}
return resultList;
}
/**
* 把YYYYMMDD格式转为YYYY-MM-DD
* @return
* @throws ParseException
*/
public static String covertDay(String date) throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd");
Date day=sdf.parse(date);
return sdf2.format(day);
}
public static List<String> getAllDateWithoutHoliday(String startDate, String endDate,List<String> holidayList,String dateType)throws Exception{
/*List<String> resultList = new ArrayList<String>();
SimpleDateFormat sdf= new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat sdf2= new SimpleDateFormat("yyyy-MM-dd");
Date st = sdf.parse(startDate);
Date et = sdf.parse(endDate);
Long oneDay = 1000 * 60 * 60 * 24l;
long startTime=st.getTime();
long endTime=et.getTime();
while(startTime<=endTime){
Date d = new Date(startTime);
String dateStr=sdf2.format(d);
if(!holidayList.contains(dateStr)){
resultList.add(dateStr);
}
startTime += oneDay;
}
return resultList;*/
Long oneDay = 1000 * 60 * 60 * 24l;
List<String> resultList = new ArrayList<String>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat yearSdf = new SimpleDateFormat("yyyy");
Date st = sdf.parse(startDate);
Date et = sdf.parse(endDate);
if (dateType.equals("week")) {
long startTime = st.getTime();
long endTime = et.getTime();
while (startTime <= endTime + (7 * oneDay)) {
Date date = new Date(startTime);
DateTime jodaTime = new DateTime(date);
int currWeek = jodaTime.getWeekOfWeekyear();
if (currWeek < 10) {
resultList.add(jodaTime.getYear() + "0" + currWeek + "");
} else {
resultList.add(jodaTime.getYear() + "" + currWeek + "");
}
startTime = jodaTime.plusWeeks(1).getMillis();
}
} else if (dateType.equals("month")) {
long startTime = st.getTime();
long endTime = et.getTime();
int month = 0;
while (startTime <= endTime) {
Date date = new Date(startTime);
DateTime jodaTime = new DateTime(date);
// TODO
int currMonth = jodaTime.getMonthOfYear();
if (month != currMonth) {
if ((currMonth + 1) <= 10) {
resultList.add(jodaTime.getYear() + "0" + (currMonth));
} else {
resultList.add(jodaTime.getYear() + "" + (currMonth) + "");
}
}
startTime = jodaTime.plusMonths(1).getMillis();
}
} else {
long startTime = st.getTime();
long endTime = et.getTime();
while (startTime <= endTime) {
if(holidayList.contains(sdf.format(startTime))){
startTime += oneDay;
continue;
}
Date d = new Date(startTime);
//TODO YYYY-MM-DD 改 YYYYMMDD
resultList.add(sdf2.format(d));
startTime += oneDay;
}
}
return resultList;
}
public static List<String> getAllHourInDay(){
List<String> resultList = new ArrayList<String>();
for(int i=0;i<24;i++){
if(i<10){
resultList.add("0"+i+":00");
}else{
resultList.add(i+":00");
}
}
return resultList;
}
//新图标X轴格式是这样的00:00-01:00 偶数跳过
public static List<String> getNewAllHourInDay(){
List<String> resultList = new ArrayList<String>();
for(int i=0;i<24;i++){
String hour="";
//拼00:00-01:00
if(i+1!=10&&i<10){
hour="0"+i+":00-0"+(i+1)+":00";
}else if(i+1>=10){
hour=i+":00-"+(i+1)+":00";
}
resultList.add(hour);
}
return resultList;
}
public static boolean isHoliday(String dateStr)throws Exception{
SimpleDateFormat sdf= new SimpleDateFormat("yyyyMMdd");
Date date=sdf.parse(dateStr);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int day = cal.get(Calendar.DAY_OF_WEEK)-1;
if(day==0||day==6){
return true;
}
return false;
}
public static List<String> getDataList()throws Exception{
//请注意月份是从0-11
Calendar start = Calendar.getInstance();
start.set(2016,0, 1);
Calendar end = Calendar.getInstance();
end.set(2016, 11,30);
int sumSunday = 0;
int sumSat = 0;
Set<String> dateSet = new TreeSet<String>();
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
while(start.compareTo(end) <= 0) {
int w = start.get(Calendar.DAY_OF_WEEK);
if(w == Calendar.SUNDAY){
sumSunday ++;
dateSet.add(format.format(start.getTime()));
}
if(w == Calendar.SATURDAY){
sumSat ++;
dateSet.add(format.format(start.getTime()));
}
//打印每天
//System.out.println(format.format(start.getTime()));
//循环,每次天数加1
start.set(Calendar.DATE, start.get(Calendar.DATE) + 1);
}
dateSet.add("20160101");
dateSet.add("20160207");
dateSet.add("20160208");
dateSet.add("20160209");
dateSet.add("20160210");
dateSet.add("20160211");
dateSet.add("20160212");
dateSet.add("20160213");
dateSet.add("20160404");
dateSet.add("20160501");
dateSet.add("20160502");
dateSet.add("20160609");
dateSet.add("20160610");
dateSet.add("20160611");
dateSet.add("20160915");
dateSet.add("20160916");
dateSet.add("20160917");
dateSet.add("20161001");
dateSet.add("20161002");
dateSet.add("20161003");
dateSet.add("20161004");
dateSet.add("20161005");
dateSet.add("20161006");
dateSet.add("20161007");
List<String> result = new ArrayList<String>(dateSet);
return result;
}
//
public static List<String> getWeekRange(List<String> rangeList){
List<String> weeks=new ArrayList<String>();
for(String weekDay:rangeList){
weeks.add(convertWeekToDate(weekDay));
}
return weeks;
}
public static String convertMonth(String month) throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMM");
Date currMonth=sdf.parse(month);
SimpleDateFormat monthSdf=new SimpleDateFormat("yyyy/MM");
return monthSdf.format(currMonth);
}
//传入开始和结束日期,得到一组月集合 格式为yyyy/MM
public static List<String> getMonthRange(String startDate,String endDate){
List<String> monthList=new ArrayList<String>();
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat month=new SimpleDateFormat("yyyy/MM");
Date sDate;
try {
sDate = sdf.parse(startDate);
Date eDate=sdf.parse(endDate);
Calendar c = Calendar.getInstance();
Calendar d = Calendar.getInstance();
c.setTime(sDate);
d.setTime(eDate);
while(!c.after(d)){
//判断月份 得到月份
monthList.add(month.format(c.getTime()));
c.add(Calendar.MONTH, 1);
}
} catch (ParseException e) {
e.printStackTrace();
}
return monthList;
}
public static List<DesignOpRead> getWeekRangeByDesignOpRead(List<DesignOpRead> rangeList){
List<DesignOpRead> weeks=new ArrayList<DesignOpRead>();
for(DesignOpRead weekDay:rangeList){
weekDay.setDate(convertWeekToDate(weekDay.getInweek()));
}
return weeks;
}
public static List<String> getMonthRange(List<DesignOpRead> rangeList){
List<String> monthList=new ArrayList<String>();
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat month=new SimpleDateFormat("yyyy/MM");
for(DesignOpRead monthDay:rangeList){
monthDay.setDate(month.format(monthDay.getDate()));
}
return monthList;
}
//周转日期 比方说2016年第一周就写201601,得到这周的第一天和最后一天 2016/12/26-2017/01/01
public static String convertWeekToDate(String weekDay){
DateTimeFormatter formatter= DateTimeFormat.forPattern("yyyyww");
DateTime d=DateTime.parse(weekDay,formatter);
System.out.println(d.getWeekOfWeekyear());
String toDate=String.format(
"%s-%s",
d.dayOfWeek().withMinimumValue().minusDays(1)
.toString("yyyy/MM/dd"),
d.dayOfWeek().withMaximumValue().minusDays(1)
.toString("yyyy/MM/dd"));
return toDate;
}
public static void main(String args[]) throws Exception{
// String startDate = "20160101";
// String endDate ="20170801";
// List<String> range=getAllDateStrInRange(startDate, endDate, "week");
// for(String d:range){
// System.out.println(d);
// }
// String startDate = "201601";
// String endDate ="201701";
//
// DateTimeFormatter formatter= DateTimeFormat.forPattern("yyyyee");
// DateTime d=DateTime.parse(startDate,formatter);
// System.out.println(d.getWeekOfWeekyear());
// String a=String.format(
// "%s-%s",
// d.dayOfWeek().withMinimumValue()
// .toString("yyyy/MM/dd"),
// d.dayOfWeek().withMaximumValue()
// .toString("yyyy/MM/dd"));
// System.out.println(a);
// System.out.println(convertWeekToDate("201644"));
Map<String,Object> tree=new TreeMap<String,Object>();
tree.put("201605", new Object());
tree.put("201606", new Object());
tree.put("201607", new Object());
tree.put("201608", new Object());
tree.put("201609", new Object());
tree.put("201610", new Object());
Iterator<String> key=tree.keySet().iterator();
while(key.hasNext()){
System.out.println(key.next());
}
}
}