瀏覽代碼

对接消息列表接口

316044749 7 年之前
父節點
當前提交
8a79932bcd

+ 1 - 0
app/src/main/java/com/ynstkz/shitu/android/activity/HomeActivity.java

@@ -179,6 +179,7 @@ public class HomeActivity extends TitleBarActivity implements AMapLocationListen
                 SharedPreferencesUtils.setLocation(amapLocation.getDistrict());
             } else {
                 //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
+                EventBus.getDefault().post(new LocationChangedEvent(null));
                 Log.e("AmapError", "location Error, ErrCode:"
                         + amapLocation.getErrorCode() + ", errInfo:"
                         + amapLocation.getErrorInfo());

+ 56 - 5
app/src/main/java/com/ynstkz/shitu/android/activity/MessageListActivity.java

@@ -4,17 +4,23 @@ import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.view.View;
 import android.widget.ImageView;
+import android.widget.ListView;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 
 import com.common.library.okhttp.callback.Callback;
+import com.common.library.pulltorefresh.PullToRefreshBase;
 import com.common.library.pulltorefresh.PullToRefreshListView;
 import com.google.gson.Gson;
 import com.ynstkz.shitu.android.R;
+import com.ynstkz.shitu.android.adapter.MessageListAdapter;
 import com.ynstkz.shitu.android.base.TitleBarActivity;
 import com.ynstkz.shitu.android.bean.MessageListBean;
 import com.ynstkz.shitu.android.data.RequestGroup;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import butterknife.Bind;
 import okhttp3.Call;
 import okhttp3.Response;
@@ -23,7 +29,7 @@ import okhttp3.Response;
  * 作者:fuchangle on 2018/2/23 10:41
  */
 
-public class MessageListActivity extends TitleBarActivity {
+public class MessageListActivity extends TitleBarActivity implements PullToRefreshBase.OnRefreshListener2<ListView>{
 
     @Bind(R.id.tv_title)
     TextView tvTitle;
@@ -38,6 +44,10 @@ public class MessageListActivity extends TitleBarActivity {
     @Bind(R.id.rl_nodata)
     RelativeLayout rlNodata;
 
+    private int pageNumber;
+    private List<MessageListBean.DataBean.MessageLisItemtBean> listData;
+    private MessageListAdapter messageListAdapter;
+
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -53,22 +63,36 @@ public class MessageListActivity extends TitleBarActivity {
 
     private void initView() {
         tvTitle.setText("系统通知");
+        pullToRefresh.setOnRefreshListener(this);
     }
 
     private void initData() {
-        getMessageList();
+        pageNumber = 1;
+        getMessageList(pageNumber);
     }
 
     private void setListener() {
 
     }
 
+    @Override
+    public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
+        pageNumber = 1;
+        getMessageList(pageNumber);
+    }
+
+    @Override
+    public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
+        pageNumber++;
+        getMessageList(pageNumber);
+    }
+
     /**
      * 获取通知列表
      */
-    private void getMessageList() {
+    private void getMessageList(final int pageNumber) {
 
-        RequestGroup.getMessageList(new Callback() {
+        RequestGroup.getMessageList(pageNumber +"", new Callback() {
             @Override
             public Object parseNetworkResponse(Response response, int id) throws Exception {
                 return new Gson().fromJson(response.body().string(), MessageListBean.class);
@@ -83,10 +107,37 @@ public class MessageListActivity extends TitleBarActivity {
             public void onResponse(Object response, int id) {
                 MessageListBean bean = (MessageListBean)response;
                 if(bean != null){
-
+                    if("200".equals(bean.getCode())){
+                        if(bean.getData() != null){
+                            if(bean.getData().getMessageList() != null && bean.getData().getMessageList().size() > 0){
+                                if(pageNumber == 1){
+                                    if(listData == null){
+                                        listData = new ArrayList<>();
+                                    }
+                                    listData.clear();
+                                    listData.addAll(bean.getData().getMessageList());
+                                    messageListAdapter = new MessageListAdapter(MessageListActivity.this, listData);
+                                    pullToRefresh.setAdapter(messageListAdapter);
+                                    messageListAdapter.notifyDataSetChanged();
+                                } else {
+                                    listData.addAll(bean.getData().getMessageList());
+                                    messageListAdapter.notifyDataSetChanged();
+                                }
+                            } else {
+                                if(listData != null && listData.size() > 0){
+                                    showToast("没有更多通知");
+                                } else {
+                                    showNoData();
+                                }
+                            }
+                        }
+                    } else {
+                        showToast(bean.getMsg());
+                    }
                 } else {
                     showNoData();
                 }
+                pullToRefresh.onRefreshComplete();
             }
         });
     }

+ 54 - 0
app/src/main/java/com/ynstkz/shitu/android/adapter/MessageListAdapter.java

@@ -0,0 +1,54 @@
+package com.ynstkz.shitu.android.adapter;
+
+import android.content.Context;
+import android.view.View;
+import android.widget.TextView;
+
+import com.common.library.adapter.CCAdapterHolder;
+import com.common.library.adapter.CCListAdapter;
+import com.common.library.utils.DateUtil;
+import com.ynstkz.shitu.android.R;
+import com.ynstkz.shitu.android.bean.MessageListBean;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 作者:fuchangle on 2018/3/12 10:29
+ */
+
+public class MessageListAdapter extends CCListAdapter<MessageListBean.DataBean.MessageLisItemtBean>{
+
+    public MessageListAdapter(Context context, List<MessageListBean.DataBean.MessageLisItemtBean> adapterContent) {
+        super(context, adapterContent);
+    }
+
+    @Override
+    public CCAdapterHolder<MessageListBean.DataBean.MessageLisItemtBean> createHolder(int type) {
+        return new CCAdapterHolder<MessageListBean.DataBean.MessageLisItemtBean>() {
+
+            private TextView tvTitle;
+            private TextView tvTime;
+            private TextView tvContent;
+
+            @Override
+            public int getResource() {
+                return R.layout.item_message_list;
+            }
+
+            @Override
+            public void initializeView(View convertView) {
+                tvTitle = convertView.findViewById(R.id.tv_title);
+                tvTime = convertView.findViewById(R.id.tv_time);
+                tvContent = convertView.findViewById(R.id.tv_content);
+            }
+
+            @Override
+            public void updateView(MessageListBean.DataBean.MessageLisItemtBean content, int position) {
+                tvTitle.setText(content.getTitle());
+                tvTime.setText(DateUtil.format(new Date(content.getSendTime()), DateUtil.DATE_FORMAT_YYYY_MM_DD));
+                tvContent.setText(content.getMessage());
+            }
+        };
+    }
+}

+ 120 - 0
app/src/main/java/com/ynstkz/shitu/android/bean/MessageListBean.java

@@ -1,7 +1,11 @@
 package com.ynstkz.shitu.android.bean;
 
+import com.google.gson.annotations.SerializedName;
 import com.ynstkz.shitu.android.base.BaseBean;
 
+import java.io.Serializable;
+import java.util.List;
+
 /**
  * 作者:fuchangle on 2018/2/23 21:16
  */
@@ -9,4 +13,120 @@ import com.ynstkz.shitu.android.base.BaseBean;
 public class MessageListBean extends BaseBean{
 
 
+    /**
+     * code : 200
+     * data : {"total":1,"pages":1,"messageList":[{"messageStatus":0,"messageId":12,"title":"消息标题","message":"消息内容","sendTime":1520775658000}],"size":10}
+     */
+
+    private DataBean data;
+
+    public DataBean getData() {
+        return data;
+    }
+
+    public void setData(DataBean data) {
+        this.data = data;
+    }
+
+    public static class DataBean implements Serializable{
+        /**
+         * total : 1
+         * pages : 1
+         * messageList : [{"messageStatus":0,"messageId":12,"title":"消息标题","message":"消息内容","sendTime":1520775658000}]
+         * size : 10
+         */
+
+        private int total;
+        private int pages;
+        private int size;
+        private List<MessageLisItemtBean> messageList;
+
+        public int getTotal() {
+            return total;
+        }
+
+        public void setTotal(int total) {
+            this.total = total;
+        }
+
+        public int getPages() {
+            return pages;
+        }
+
+        public void setPages(int pages) {
+            this.pages = pages;
+        }
+
+        public int getSize() {
+            return size;
+        }
+
+        public void setSize(int size) {
+            this.size = size;
+        }
+
+        public List<MessageLisItemtBean> getMessageList() {
+            return messageList;
+        }
+
+        public void setMessageList(List<MessageLisItemtBean> messageList) {
+            this.messageList = messageList;
+        }
+
+        public static class MessageLisItemtBean implements Serializable{
+            /**
+             * messageStatus : 0
+             * messageId : 12
+             * title : 消息标题
+             * message : 消息内容
+             * sendTime : 1520775658000
+             */
+
+            private int messageStatus;
+            private int messageId;
+            private String title;
+            private String message;
+            private long sendTime;
+
+            public int getMessageStatus() {
+                return messageStatus;
+            }
+
+            public void setMessageStatus(int messageStatus) {
+                this.messageStatus = messageStatus;
+            }
+
+            public int getMessageId() {
+                return messageId;
+            }
+
+            public void setMessageId(int messageId) {
+                this.messageId = messageId;
+            }
+
+            public String getTitle() {
+                return title;
+            }
+
+            public void setTitle(String title) {
+                this.title = title;
+            }
+
+            public String getMessage() {
+                return message;
+            }
+
+            public void setMessage(String message) {
+                this.message = message;
+            }
+
+            public long getSendTime() {
+                return sendTime;
+            }
+
+            public void setSendTime(long sendTime) {
+                this.sendTime = sendTime;
+            }
+        }
+    }
 }

+ 3 - 1
app/src/main/java/com/ynstkz/shitu/android/data/RequestGroup.java

@@ -205,8 +205,10 @@ public class RequestGroup {
     /**
      * 获取消息列表
      */
-    public static void getMessageList(Callback callback){
+    public static void getMessageList(String pageNumber, Callback callback){
         Map<String, String> params = getSystemParams();
+        params.put("pageNumber",pageNumber);
+        params.put("pageSize", "10");
         OkHttpUtils.get().url(UrlCat.URL_MESSAGE_LIST).addHeader(KEY_TOKEN,
                 SharedPreferencesUtils.getToken()).params(params).build().execute(callback);
     }

+ 11 - 6
app/src/main/java/com/ynstkz/shitu/android/fragment/HomeFragment.java

@@ -408,13 +408,18 @@ public class HomeFragment extends BaseFragment implements PullToRefreshBase.OnRe
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void onMessageEvent(LocationChangedEvent event) {
-        tvLocation.setText(event.getAmapLocation().getDistrict());
+        if(event.getAmapLocation() != null){
+            tvLocation.setText(event.getAmapLocation().getDistrict());
+            //获取推荐机构列表
+            pageNumber = 1;
+            longitude = event.getAmapLocation().getLongitude();
+            latitude = event.getAmapLocation().getLatitude();
+            getOrgRecommendList(longitude + "," + latitude);
+        } else {
+            pageNumber = 1;
+            getOrgRecommendList("");
+        }
 
-        //获取推荐机构列表
-        pageNumber = 1;
-        longitude = event.getAmapLocation().getLongitude();
-        latitude = event.getAmapLocation().getLatitude();
-        getOrgRecommendList(longitude + "," + latitude);
     }
 
     @Override

+ 11 - 7
app/src/main/java/com/ynstkz/shitu/android/fragment/OrgListFragment.java

@@ -231,13 +231,17 @@ public class OrgListFragment extends BaseFragment implements PullToRefreshBase.O
 
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void onMessageEvent(LocationChangedEvent event) {
-        tvLocation.setText(event.getAmapLocation().getDistrict());
-
-        //获取推荐机构列表
-        pageNumber = 1;
-        longitude = event.getAmapLocation().getLongitude();
-        latitude = event.getAmapLocation().getLatitude();
-        getOrgList(longitude + "," + latitude);
+        if(event.getAmapLocation() != null){
+            tvLocation.setText(event.getAmapLocation().getDistrict());
+            //获取推荐机构列表
+            pageNumber = 1;
+            longitude = event.getAmapLocation().getLongitude();
+            latitude = event.getAmapLocation().getLatitude();
+            getOrgList(longitude + "," + latitude);
+        } else {
+            pageNumber = 1;
+            getOrgList("");
+        }
     }
 
     // 返回键按下时会被调用

二進制
app/src/main/res/drawable-xxhdpi/message_nodify_icon.png


+ 58 - 0
app/src/main/res/layout/item_message_list.xml

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="horizontal"
+    android:padding="@dimen/default_content_margin">
+
+    <ImageView
+        android:layout_width="@dimen/company_40dp"
+        android:layout_height="@dimen/company_40dp"
+        android:background="@drawable/message_nodify_icon"/>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="@dimen/company_10dp"
+        android:orientation="vertical">
+
+        <RelativeLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/company_10dp">
+
+            <TextView
+                android:id="@+id/tv_title"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+
+                android:textColor="@color/color_333"
+                android:textSize="@dimen/company_15sp"
+                android:textStyle="bold"
+                android:text="报名成功"/>
+
+            <TextView
+                android:id="@+id/tv_time"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_alignParentRight="true"
+                android:textColor="@color/color_999"
+                android:textSize="@dimen/company_12sp"
+                android:text="2018-02-02"/>
+
+        </RelativeLayout>
+
+        <TextView
+            android:id="@+id/tv_content"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/company_8dp"
+            android:background="#f0f0f0"
+            android:padding="@dimen/company_5dp"
+            android:textSize="@dimen/company_15sp"
+            android:textColor="@color/color_666"
+            android:text="您已经成功报名新东方英语暑假班,请耐心"/>
+
+    </LinearLayout>
+
+</LinearLayout>

+ 886 - 0
library/src/main/java/com/common/library/utils/DateUtil.java

@@ -0,0 +1,886 @@
+package com.common.library.utils;
+
+
+import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+/**
+ * 日期工具类
+ */
+public class DateUtil {
+
+    // ==格式到年==
+    /**
+     * 日期格式,年份,例如:2004,2008
+     */
+    public static final String DATE_FORMAT_YYYY = "yyyy";
+
+
+    // ==格式到年月 ==
+    /**
+     * 日期格式,年份和月份,例如:200707,200808
+     */
+    public static final String DATE_FORMAT_YYYYMM = "yyyyMM";
+
+    /**
+     * 日期格式,年份和月份,例如:200707,2008-08
+     */
+    public static final String DATE_FORMAT_YYYY_MM = "yyyy-MM";
+
+
+    // ==格式到年月日==
+    /**
+     * 日期格式,年月日,例如:050630,080808
+     */
+    public static final String DATE_FORMAT_YYMMDD = "yyMMdd";
+
+    /**
+     * 日期格式,年月日,用横杠分开,例如:06-12-25,08-08-08
+     */
+    public static final String DATE_FORMAT_YY_MM_DD = "yy-MM-dd";
+
+    /**
+     * 日期格式,年月日,例如:20050630,20080808
+     */
+    public static final String DATE_FORMAT_YYYYMMDD = "yyyyMMdd";
+
+    /**
+     * 日期格式,年月日,用横杠分开,例如:2006-12-25,2008-08-08
+     */
+    public static final String DATE_FORMAT_YYYY_MM_DD = "yyyy-MM-dd";
+
+    /**
+     * 日期格式,年月日,例如:2016.10.05
+     */
+    public static final String DATE_FORMAT_POINTYYYYMMDD = "yyyy.MM.dd";
+
+    /**
+     * 日期格式,年月日,例如:2016年10月05日
+     */
+    public static final String DATE_TIME_FORMAT_YYYY年MM月DD日 = "yyyy年MM月dd日";
+
+
+    // ==格式到年月日 时分 ==
+
+    /**
+     * 日期格式,年月日时分,例如:200506301210,200808081210
+     */
+    public static final String DATE_FORMAT_YYYYMMDDHHmm = "yyyyMMddHHmm";
+
+    /**
+     * 日期格式,年月日时分,例如:20001230 12:00,20080808 20:08
+     */
+    public static final String DATE_TIME_FORMAT_YYYYMMDD_HH_MI = "yyyyMMdd HH:mm";
+
+    /**
+     * 日期格式,年月日时分,例如:2000-12-30 12:00,2008-08-08 20:08
+     */
+    public static final String DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI = "yyyy-MM-dd HH:mm";
+
+
+    // ==格式到年月日 时分秒==
+    /**
+     * 日期格式,年月日时分秒,例如:20001230120000,20080808200808
+     */
+    public static final String DATE_TIME_FORMAT_YYYYMMDDHHMISS = "yyyyMMddHHmmss";
+
+    /**
+     * 日期格式,年月日时分秒,年月日用横杠分开,时分秒用冒号分开
+     * 例如:2005-05-10 23:20:00,2008-08-08 20:08:08
+     */
+    public static final String DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS = "yyyy-MM-dd HH:mm:ss";
+
+
+    // ==格式到年月日 时分秒 毫秒==
+    /**
+     * 日期格式,年月日时分秒毫秒,例如:20001230120000123,20080808200808456
+     */
+    public static final String DATE_TIME_FORMAT_YYYYMMDDHHMISSSSS = "yyyyMMddHHmmssSSS";
+
+
+    // ==特殊格式==
+    /**
+     * 日期格式,月日时分,例如:10-05 12:00
+     */
+    public static final String DATE_FORMAT_MMDDHHMI = "MM-dd HH:mm";
+
+
+	/* ************工具方法***************   */
+
+    /**
+     * 获取某日期的年份
+     *
+     * @param date
+     * @return
+     */
+    public static Integer getYear(Date date) {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(date);
+        return cal.get(Calendar.YEAR);
+    }
+
+    /**
+     * 获取某日期的月份
+     *
+     * @param date
+     * @return
+     */
+    public static Integer getMonth(Date date) {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(date);
+        return cal.get(Calendar.MONTH) + 1;
+    }
+
+    /**
+     * 获取某日期的日数
+     *
+     * @param date
+     * @return
+     */
+    public static Integer getDay(Date date) {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(date);
+        int day = cal.get(Calendar.DATE);//获取日
+        return day;
+    }
+
+    /**
+     * 格式化Date时间
+     *
+     * @param time       Date类型时间
+     * @param timeFromat String类型格式
+     * @return 格式化后的字符串
+     */
+    public static String parseDateToStr(Date time, String timeFromat) {
+        DateFormat dateFormat = new SimpleDateFormat(timeFromat);
+        return dateFormat.format(time);
+    }
+
+    /**
+     * 格式化Timestamp时间
+     *
+     * @param timestamp  Timestamp类型时间
+     * @param timeFromat
+     * @return 格式化后的字符串
+     */
+    public static String parseTimestampToStr(Timestamp timestamp, String timeFromat) {
+        SimpleDateFormat df = new SimpleDateFormat(timeFromat);
+        return df.format(timestamp);
+    }
+
+    /**
+     * 格式化Date时间
+     *
+     * @param time         Date类型时间
+     * @param timeFromat   String类型格式
+     * @param defaultValue 默认值为当前时间Date
+     * @return 格式化后的字符串
+     */
+    public static String parseDateToStr(Date time, String timeFromat, final Date defaultValue) {
+        try {
+            DateFormat dateFormat = new SimpleDateFormat(timeFromat);
+            return dateFormat.format(time);
+        } catch (Exception e) {
+            if (defaultValue != null)
+                return parseDateToStr(defaultValue, timeFromat);
+            else
+                return parseDateToStr(new Date(), timeFromat);
+        }
+    }
+
+    /**
+     * 格式化Date时间
+     *
+     * @param time         Date类型时间
+     * @param timeFromat   String类型格式
+     * @param defaultValue 默认时间值String类型
+     * @return 格式化后的字符串
+     */
+    public static String parseDateToStr(Date time, String timeFromat, final String defaultValue) {
+        try {
+            DateFormat dateFormat = new SimpleDateFormat(timeFromat);
+            return dateFormat.format(time);
+        } catch (Exception e) {
+            return defaultValue;
+        }
+    }
+
+    /**
+     * 格式化String时间
+     *
+     * @param time       String类型时间
+     * @param timeFromat String类型格式
+     * @return 格式化后的Date日期
+     */
+    public static Date parseStrToDate(String time, String timeFromat) {
+        if (time == null || time.equals("")) {
+            return null;
+        }
+
+        Date date = null;
+        try {
+            DateFormat dateFormat = new SimpleDateFormat(timeFromat);
+            date = dateFormat.parse(time);
+        } catch (Exception e) {
+
+        }
+        return date;
+    }
+
+    /**
+     * 格式化String时间
+     *
+     * @param strTime      String类型时间
+     * @param timeFromat   String类型格式
+     * @param defaultValue 异常时返回的默认值
+     * @return
+     */
+    public static Date parseStrToDate(String strTime, String timeFromat,
+                                      Date defaultValue) {
+        try {
+            DateFormat dateFormat = new SimpleDateFormat(timeFromat);
+            return dateFormat.parse(strTime);
+        } catch (Exception e) {
+            return defaultValue;
+        }
+    }
+
+    /**
+     * 当strTime为2008-9时返回为2008-9-1 00:00格式日期时间,无法转换返回null.
+     *
+     * @param strTime
+     * @return
+     */
+    public static Date strToDate(String strTime) {
+        if (strTime == null || strTime.trim().length() <= 0)
+            return null;
+
+        Date date = null;
+        List<String> list = new ArrayList<String>(0);
+
+        list.add(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS);
+        list.add(DATE_TIME_FORMAT_YYYYMMDDHHMISSSSS);
+        list.add(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI);
+        list.add(DATE_TIME_FORMAT_YYYYMMDD_HH_MI);
+        list.add(DATE_TIME_FORMAT_YYYYMMDDHHMISS);
+        list.add(DATE_FORMAT_YYYY_MM_DD);
+        //list.add(DATE_FORMAT_YY_MM_DD);
+        list.add(DATE_FORMAT_YYYYMMDD);
+        list.add(DATE_FORMAT_YYYY_MM);
+        list.add(DATE_FORMAT_YYYYMM);
+        list.add(DATE_FORMAT_YYYY);
+
+
+        for (Iterator iter = list.iterator(); iter.hasNext(); ) {
+            String format = (String) iter.next();
+            if (strTime.indexOf("-") > 0 && format.indexOf("-") < 0)
+                continue;
+            if (strTime.indexOf("-") < 0 && format.indexOf("-") > 0)
+                continue;
+            if (strTime.length() > format.length())
+                continue;
+            date = parseStrToDate(strTime, format);
+            if (date != null)
+                break;
+        }
+
+        return date;
+    }
+
+    /**
+     * 解析两个日期之间的所有月份
+     *
+     * @param beginDateStr 开始日期,至少精确到yyyy-MM
+     * @param endDateStr   结束日期,至少精确到yyyy-MM
+     * @return yyyy-MM日期集合
+     */
+    public static List<String> getMonthListOfDate(String beginDateStr, String endDateStr) {
+        // 指定要解析的时间格式
+        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM");
+        // 返回的月份列表
+        String sRet = "";
+
+        // 定义一些变量
+        Date beginDate = null;
+        Date endDate = null;
+
+        GregorianCalendar beginGC = null;
+        GregorianCalendar endGC = null;
+        List<String> list = new ArrayList<String>();
+
+        try {
+            // 将字符串parse成日期
+            beginDate = f.parse(beginDateStr);
+            endDate = f.parse(endDateStr);
+
+            // 设置日历
+            beginGC = new GregorianCalendar();
+            beginGC.setTime(beginDate);
+
+            endGC = new GregorianCalendar();
+            endGC.setTime(endDate);
+
+            // 直到两个时间相同
+            while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) {
+                sRet = beginGC.get(Calendar.YEAR) + "-"
+                        + (beginGC.get(Calendar.MONTH) + 1);
+                list.add(sRet);
+                // 以月为单位,增加时间
+                beginGC.add(Calendar.MONTH, 1);
+            }
+            return list;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 解析两个日期段之间的所有日期
+     *
+     * @param beginDateStr 开始日期  ,至少精确到yyyy-MM-dd
+     * @param endDateStr   结束日期  ,至少精确到yyyy-MM-dd
+     * @return yyyy-MM-dd日期集合
+     */
+    public static List<String> getDayListOfDate(String beginDateStr, String endDateStr) {
+        // 指定要解析的时间格式
+        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");
+
+        // 定义一些变量
+        Date beginDate = null;
+        Date endDate = null;
+
+        Calendar beginGC = null;
+        Calendar endGC = null;
+        List<String> list = new ArrayList<String>();
+
+        try {
+            // 将字符串parse成日期
+            beginDate = f.parse(beginDateStr);
+            endDate = f.parse(endDateStr);
+
+            // 设置日历
+            beginGC = Calendar.getInstance();
+            beginGC.setTime(beginDate);
+
+            endGC = Calendar.getInstance();
+            endGC.setTime(endDate);
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
+            // 直到两个时间相同
+            while (beginGC.getTime().compareTo(endGC.getTime()) <= 0) {
+
+                list.add(sdf.format(beginGC.getTime()));
+                // 以日为单位,增加时间
+                beginGC.add(Calendar.DAY_OF_MONTH, 1);
+            }
+            return list;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 获取当下年份指定前后数量的年份集合
+     *
+     * @param before 当下年份前年数
+     * @param behind 当下年份后年数
+     * @return 集合
+     */
+    public static List<Integer> getYearListOfYears(int before, int behind) {
+        if (before < 0 || behind < 0) {
+            return null;
+        }
+        List<Integer> list = new ArrayList<Integer>();
+        Calendar c = null;
+        c = Calendar.getInstance();
+        c.setTime(new Date());
+        int currYear = Calendar.getInstance().get(Calendar.YEAR);
+
+        int startYear = currYear - before;
+        int endYear = currYear + behind;
+        for (int i = startYear; i < endYear; i++) {
+            list.add(Integer.valueOf(i));
+        }
+        return list;
+    }
+
+    /**
+     * 获取当前日期是一年中第几周
+     *
+     * @param date
+     * @return
+     */
+    public static Integer getWeekthOfYear(Date date) {
+        Calendar c = new GregorianCalendar();
+        c.setFirstDayOfWeek(Calendar.MONDAY);
+        c.setMinimalDaysInFirstWeek(7);
+        c.setTime(date);
+
+        return c.get(Calendar.WEEK_OF_YEAR);
+    }
+
+    /**
+     * 获取某一年各星期的始终时间
+     * 实例:getWeekList(2016),第52周(从2016-12-26至2017-01-01)
+     *
+     * @param 年份
+     * @return
+     */
+    public static HashMap<Integer, String> getWeekTimeOfYear(int year) {
+        HashMap<Integer, String> map = new LinkedHashMap<Integer, String>();
+        Calendar c = new GregorianCalendar();
+        c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);
+        int count = getWeekthOfYear(c.getTime());
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        String dayOfWeekStart = "";
+        String dayOfWeekEnd = "";
+        for (int i = 1; i <= count; i++) {
+            dayOfWeekStart = sdf.format(getFirstDayOfWeek(year, i));
+            dayOfWeekEnd = sdf.format(getLastDayOfWeek(year, i));
+            map.put(Integer.valueOf(i), "第" + i + "周(从" + dayOfWeekStart + "至" + dayOfWeekEnd + ")");
+        }
+        return map;
+
+    }
+
+    /**
+     * 获取某一年的总周数
+     *
+     * @param year
+     * @return
+     */
+    public static Integer getWeekCountOfYear(int year) {
+        Calendar c = new GregorianCalendar();
+        c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);
+        int count = getWeekthOfYear(c.getTime());
+        return count;
+    }
+
+    /**
+     * 获取指定日期所在周的第一天
+     *
+     * @param date
+     * @return
+     */
+    public static Date getFirstDayOfWeek(Date date) {
+        Calendar c = new GregorianCalendar();
+        c.setFirstDayOfWeek(Calendar.MONDAY);
+        c.setTime(date);
+        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
+        return c.getTime();
+    }
+
+    /**
+     * 获取指定日期所在周的最后一天
+     *
+     * @param date
+     * @return
+     */
+    public static Date getLastDayOfWeek(Date date) {
+        Calendar c = new GregorianCalendar();
+        c.setFirstDayOfWeek(Calendar.MONDAY);
+        c.setTime(date);
+        c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
+        return c.getTime();
+    }
+
+    /**
+     * 获取某年某周的第一天
+     *
+     * @param year 目标年份
+     * @param week 目标周数
+     * @return
+     */
+    public static Date getFirstDayOfWeek(int year, int week) {
+        Calendar c = new GregorianCalendar();
+        c.set(Calendar.YEAR, year);
+        c.set(Calendar.MONTH, Calendar.JANUARY);
+        c.set(Calendar.DATE, 1);
+
+        Calendar cal = (GregorianCalendar) c.clone();
+        cal.add(Calendar.DATE, week * 7);
+
+        return getFirstDayOfWeek(cal.getTime());
+    }
+
+    /**
+     * 获取某年某周的最后一天
+     *
+     * @param year 目标年份
+     * @param week 目标周数
+     * @return
+     */
+    public static Date getLastDayOfWeek(int year, int week) {
+        Calendar c = new GregorianCalendar();
+        c.set(Calendar.YEAR, year);
+        c.set(Calendar.MONTH, Calendar.JANUARY);
+        c.set(Calendar.DATE, 1);
+
+        Calendar cal = (GregorianCalendar) c.clone();
+        cal.add(Calendar.DATE, week * 7);
+
+        return getLastDayOfWeek(cal.getTime());
+    }
+
+    /**
+     * 获取某年某月的第一天
+     *
+     * @param year  目标年份
+     * @param month 目标月份
+     * @return
+     */
+    public static Date getFirstDayOfMonth(int year, int month) {
+        month = month - 1;
+        Calendar c = Calendar.getInstance();
+        c.set(Calendar.YEAR, year);
+        c.set(Calendar.MONTH, month);
+
+        int day = c.getActualMinimum(c.DAY_OF_MONTH);
+
+        c.set(Calendar.DAY_OF_MONTH, day);
+        c.set(Calendar.HOUR_OF_DAY, 0);
+        c.set(Calendar.MINUTE, 0);
+        c.set(Calendar.SECOND, 0);
+        c.set(Calendar.MILLISECOND, 0);
+        return c.getTime();
+    }
+
+    /**
+     * 获取某年某月的最后一天
+     *
+     * @param year  目标年份
+     * @param month 目标月份
+     * @return
+     */
+    public static Date getLastDayOfMonth(int year, int month) {
+        month = month - 1;
+        Calendar c = Calendar.getInstance();
+        c.set(Calendar.YEAR, year);
+        c.set(Calendar.MONTH, month);
+        int day = c.getActualMaximum(c.DAY_OF_MONTH);
+        c.set(Calendar.DAY_OF_MONTH, day);
+        c.set(Calendar.HOUR_OF_DAY, 23);
+        c.set(Calendar.MINUTE, 59);
+        c.set(Calendar.SECOND, 59);
+        c.set(Calendar.MILLISECOND, 999);
+        return c.getTime();
+    }
+
+    /**
+     * 获取某个日期为星期几
+     *
+     * @param date
+     * @return String "星期*"
+     */
+    public static String getDayWeekOfDate1(Date date) {
+        String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(date);
+
+        int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
+        if (w < 0)
+            w = 0;
+
+        return weekDays[w];
+    }
+
+    /**
+     * 获得指定日期的星期几数
+     *
+     * @param date
+     * @return int
+     */
+    public static Integer getDayWeekOfDate2(Date date) {
+        Calendar aCalendar = Calendar.getInstance();
+        aCalendar.setTime(date);
+        int weekDay = aCalendar.get(Calendar.DAY_OF_WEEK);
+        return weekDay;
+    }
+
+    /**
+     * 验证字符串是否为日期
+     * 验证格式:YYYYMMDD、YYYY_MM_DD、YYYYMMDDHHMISS、YYYYMMDD_HH_MI、YYYY_MM_DD_HH_MI、YYYYMMDDHHMISSSSS、YYYY_MM_DD_HH_MI_SS
+     *
+     * @param strTime
+     * @return null时返回false;true为日期,false不为日期
+     */
+    public static boolean validateIsDate(String strTime) {
+        if (strTime == null || strTime.trim().length() <= 0)
+            return false;
+
+        Date date = null;
+        List<String> list = new ArrayList<String>(0);
+
+        list.add(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS);
+        list.add(DATE_TIME_FORMAT_YYYYMMDDHHMISSSSS);
+        list.add(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI);
+        list.add(DATE_TIME_FORMAT_YYYYMMDD_HH_MI);
+        list.add(DATE_TIME_FORMAT_YYYYMMDDHHMISS);
+        list.add(DATE_FORMAT_YYYY_MM_DD);
+        //list.add(DATE_FORMAT_YY_MM_DD);
+        list.add(DATE_FORMAT_YYYYMMDD);
+        //list.add(DATE_FORMAT_YYYY_MM);
+        //list.add(DATE_FORMAT_YYYYMM);
+        //list.add(DATE_FORMAT_YYYY);
+
+        for (Iterator iter = list.iterator(); iter.hasNext(); ) {
+            String format = (String) iter.next();
+            if (strTime.indexOf("-") > 0 && format.indexOf("-") < 0)
+                continue;
+            if (strTime.indexOf("-") < 0 && format.indexOf("-") > 0)
+                continue;
+            if (strTime.length() > format.length())
+                continue;
+            date = parseStrToDate(strTime.trim(), format);
+            if (date != null)
+                break;
+        }
+
+        if (date != null) {
+            System.out.println("生成的日期:" + DateUtil.parseDateToStr(date, DateUtil.DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS, "--null--"));
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 将指定日期的时分秒格式为零
+     *
+     * @param date
+     * @return
+     */
+    public static Date formatHhMmSsOfDate(Date date) {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(date);
+        cal.set(Calendar.HOUR_OF_DAY, 0);
+        cal.set(Calendar.MINUTE, 0);
+        cal.set(Calendar.SECOND, 0);
+        cal.set(Calendar.MILLISECOND, 0);
+        return cal.getTime();
+    }
+
+    /**
+     * 获得指定时间加减参数后的日期(不计算则输入0)
+     *
+     * @param date        指定日期
+     * @param year        年数,可正可负
+     * @param month       月数,可正可负
+     * @param day         天数,可正可负
+     * @param hour        小时数,可正可负
+     * @param minute      分钟数,可正可负
+     * @param second      秒数,可正可负
+     * @param millisecond 毫秒数,可正可负
+     * @return 计算后的日期
+     */
+    public static Date addDate(Date date, int year, int month, int day, int hour, int minute, int second, int millisecond) {
+        Calendar c = Calendar.getInstance();
+        c.setTime(date);
+        c.add(Calendar.YEAR, year);//加减年数
+        c.add(Calendar.MONTH, month);//加减月数
+        c.add(Calendar.DATE, day);//加减天数
+        c.add(Calendar.HOUR, hour);//加减小时数
+        c.add(Calendar.MINUTE, minute);//加减分钟数
+        c.add(Calendar.SECOND, second);//加减秒
+        c.add(Calendar.MILLISECOND, millisecond);//加减毫秒数
+
+        return c.getTime();
+    }
+
+    /**
+     * 获得两个日期的时间戳之差
+     *
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    public static Long getDistanceTimestamp(Date startDate, Date endDate) {
+        long daysBetween = (endDate.getTime() - startDate.getTime() + 1000000) / (3600 * 24 * 1000);
+        return daysBetween;
+    }
+
+    /**
+     * 判断二个时间是否为同年同月
+     *
+     * @param date1
+     * @param date2
+     * @return
+     */
+    public static Boolean compareIsSameMonth(Date date1, Date date2) {
+        boolean flag = false;
+        int year1 = getYear(date1);
+        int year2 = getYear(date2);
+        if (year1 == year2) {
+            int month1 = getMonth(date1);
+            int month2 = getMonth(date2);
+            if (month1 == month2) flag = true;
+        }
+        return flag;
+    }
+
+    /**
+     * 获得两个时间相差距离多少天多少小时多少分多少秒
+     *
+     * @param str1 时间参数 1 格式:1990-01-01 12:00:00
+     * @param str2 时间参数 2 格式:2009-01-01 12:00:00
+     * @return long[] 返回值为:{天, 时, 分, 秒}
+     */
+    public static long[] getDistanceTime(Date one, Date two) {
+        long day = 0;
+        long hour = 0;
+        long min = 0;
+        long sec = 0;
+        try {
+
+            long time1 = one.getTime();
+            long time2 = two.getTime();
+            long diff;
+            if (time1 < time2) {
+                diff = time2 - time1;
+            } else {
+                diff = time1 - time2;
+            }
+            day = diff / (24 * 60 * 60 * 1000);
+            hour = (diff / (60 * 60 * 1000) - day * 24);
+            min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60);
+            sec = (diff / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        long[] times = {day, hour, min, sec};
+        return times;
+    }
+
+    /**
+     * 两个时间相差距离多少天多少小时多少分多少秒
+     *
+     * @param str1 时间参数 1 格式:1990-01-01 12:00:00
+     * @param str2 时间参数 2 格式:2009-01-01 12:00:00
+     * @return String 返回值为:{天, 时, 分, 秒}
+     */
+    public static long[] getDistanceTime(String str1, String str2) {
+        DateFormat df = new SimpleDateFormat(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS);
+        Date one;
+        Date two;
+        long day = 0;
+        long hour = 0;
+        long min = 0;
+        long sec = 0;
+        try {
+            one = df.parse(str1);
+            two = df.parse(str2);
+            long time1 = one.getTime();
+            long time2 = two.getTime();
+            long diff;
+            if (time1 < time2) {
+                diff = time2 - time1;
+            } else {
+                diff = time1 - time2;
+            }
+            day = diff / (24 * 60 * 60 * 1000);
+            hour = (diff / (60 * 60 * 1000) - day * 24);
+            min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60);
+            sec = (diff / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        long[] times = {day, hour, min, sec};
+        return times;
+    }
+
+    /**
+     * 两个时间之间相差距离多少天
+     *
+     * @param one 时间参数 1:
+     * @param two 时间参数 2:
+     * @return 相差天数
+     */
+    public static Long getDistanceDays(String str1, String str2) throws Exception {
+        DateFormat df = new SimpleDateFormat(DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS);
+        Date one;
+        Date two;
+        long days = 0;
+        try {
+            one = df.parse(str1);
+            two = df.parse(str2);
+            long time1 = one.getTime();
+            long time2 = two.getTime();
+            long diff;
+            if (time1 < time2) {
+                diff = time2 - time1;
+            } else {
+                diff = time1 - time2;
+            }
+            days = diff / (1000 * 60 * 60 * 24);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return days;
+    }
+
+    /**
+     * 获取指定时间的那天 00:00:00.000 的时间
+     *
+     * @param date
+     * @return
+     */
+    public static Date getDayBeginTime(final Date date) {
+        Calendar c = Calendar.getInstance();
+        c.setTime(date);
+        c.set(Calendar.HOUR_OF_DAY, 0);
+        c.set(Calendar.MINUTE, 0);
+        c.set(Calendar.SECOND, 0);
+        c.set(Calendar.MILLISECOND, 0);
+        return c.getTime();
+    }
+
+    /**
+     * 获取指定时间的那天 23:59:59.999 的时间
+     *
+     * @param date
+     * @return
+     */
+    public static Date getDayEndTime(final Date date) {
+        Calendar c = Calendar.getInstance();
+        c.setTime(date);
+        c.set(Calendar.HOUR_OF_DAY, 23);
+        c.set(Calendar.MINUTE, 59);
+        c.set(Calendar.SECOND, 59);
+        c.set(Calendar.MILLISECOND, 999);
+        return c.getTime();
+    }
+
+
+    public static void main(String[] args) {
+        try {
+            DateUtil dateUtil = new DateUtil();
+            System.out.println();
+
+        } catch (Exception e) {
+            // TODO: handle exception
+        }
+
+    }
+
+    /**
+     * 通用格式化时间
+     * @param date
+     * @param format
+     * @return
+     */
+    public static String format(Date date, String format) {
+        return new SimpleDateFormat(format).format(date);
+    }
+}