上面就是运行的效果
用到的是系统提供的一个强大的日历类Calendar,你可以给日历设置一个日期,然后在通过他的方法去得到这个日期前后的日期
但是得到的日期样式是这样的:
Wed Dec 07 12:10:38 GMT+08:00 2016
这就需要我门自己去处理转换成我们想要的格式了
接下来看具体实现步骤:
把传入的String字符串转换成Date格式
//先将String日期转换成Date类型
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = dateFormat.parse(dd);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
//最重要的一步,把日期设置给日历
cal.setTime(date);
//n是你要增加的天数,如果要算前几天的就传负数
cal.add(Calendar.DATE, n);
Date time = cal.getTime();
2,处理得到想要的日期格式
处理过程为:
//转换成string
String s = date.toString();
//截取一下拿到Wed Dec 07
String substring = s.substring(0, 10);
//通过空格来分割,
String[] split = substring.split(" ");
//得到Wed---周几
String week = split[0];
//得到月份Dec
String month = split[1];
//得到日子07
String day = split[2];
//得到年份
String year = s.substring(s.length() - 4, s.length());
//根据得到的星期的首字母去转换成中文
switch (week) {
case "Mon":
week = "周一";
break;
case "Tue":
week = "周二";
break;
case "Wed":
week = "周三";
break;
case "Thu":
week = "周四";
break;
case "Fri":
week = "周五";
break;
case "Sat":
week = "周六";
break;
case "Sun":
week = "周日";
break;
}
//根据得到的月的英文字母去转换成月份
switch (month) {
case "Jan":
month = "1";
break;
case "Feb":
month = "2";
break;
case "Mar":
month = "3";
break;
case "Apr":
month = "4";
break;
case "May":
month = "5";
break;
case "Jun":
month = "6";
break;
case "Jul":
month = "7";
break;
case "Aug":
month = "8";
break;
case "Sept":
month = "9";
break;
case "Oct":
month = "10";
break;
case "Nov":
month = "11";
break;
case "Dec":
month = "12";
break;
}
整个我封装的date工具类为:
package com.duanlian.datedisposedemo.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 时间工具类
*/
public class DateUtils {
/**
* 传入格式为date
*
* @return 1111年11月11日:周1
*/
public static String getDate(Date date) {
//转换成string
String s = date.toString();
//截取一下拿到Wed Dec 07
String substring = s.substring(0, 10);
//通过空格来分割,
String[] split = substring.split(" ");
//得到Wed---周几
String week = split[0];
//得到月份Dec
String month = split[1];
//得到日子07
String day = split[2];
//得到年份
String year = s.substring(s.length() - 4, s.length());
//根据得到的星期的首字母去转换成中文
switch (week) {
case "Mon":
week = "周一";
break;
case "Tue":
week = "周二";
break;
case "Wed":
week = "周三";
break;
case "Thu":
week = "周四";
break;
case "Fri":
week = "周五";
break;
case "Sat":
week = "周六";
break;
case "Sun":
week = "周日";
break;
}
//根据得到的月的英文字母去转换成月份
switch (month) {
case "Jan":
month = "1";
break;
case "Feb":
month = "2";
break;
case "Mar":
month = "3";
break;
case "Apr":
month = "4";
break;
case "May":
month = "5";
break;
case "Jun":
month = "6";
break;
case "Jul":
month = "7";
break;
case "Aug":
month = "8";
break;
case "Sept":
month = "9";
break;
case "Oct":
month = "10";
break;
case "Nov":
month = "11";
break;
case "Dec":
month = "12";
break;
}
return year + "年" + month + "月" + day + "日:" + week;
}
/**
* 返回一个日期2016年11月09日:周一
*
* @return
*/
public static String disposeDate(int num) {
//系统提供的日历类
Calendar calendar = Calendar.getInstance();
//num是里当前日期的天数,传0代表今天,1代表明天,-1代表昨天
calendar.add(Calendar.DAY_OF_YEAR, num);
//拿到时间,但是格式是:Wed Dec 07 12:10:38 GMT+08:00 2016
Date date = calendar.getTime();
return getDate(date);
}
/**
* 传入一个2016-3-30
* n:在日期上增加天数,返回2016年3月30日:周六
*
* @param n 要增加的天数
* @return 增加之后的天数
*/
public static String disposeDate(String dd, int n) {
//先将String日期转换成Date类型
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = dateFormat.parse(dd);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
//最重要的一步,把日期设置给日历
cal.setTime(date);
//n是你要增加的天数,如果要算前几天的就传负数
cal.add(Calendar.DATE, n);
Date time = cal.getTime();
return getDate(time);
}
}
demo的xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.duanlian.datedisposedemo.MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="输入的格式不正确会崩溃"
android:textSize="30dp"/>
<EditText
android:id="@+id/et"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="20dp"
android:digits="0123456789-"
android:hint="输入正确格式的日期:2016-1-2"
android:paddingLeft="10dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal">
<Button
android:id="@+id/today"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="click"
android:text="今天"
/>
<Button
android:id="@+id/date"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="click"
android:text="确定"
/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第一天:"/>
<TextView
android:id="@+id/one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text=""/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第二天:"/>
<TextView
android:id="@+id/two"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text=""/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第三天:"/>
<TextView
android:id="@+id/three"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text=""/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第四天:"/>
<TextView
android:id="@+id/four"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text=""/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第五天:"/>
<TextView
android:id="@+id/five"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text=""/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第六天:"/>
<TextView
android:id="@+id/six"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text=""/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第七天:"/>
<TextView
android:id="@+id/seven"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text=""/>
</LinearLayout>
</LinearLayout>
Activity中的具体操作,代码很简单一看就懂了:
package com.duanlian.datedisposedemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import static com.duanlian.datedisposedemo.utils.DateUtils.disposeDate;
public class MainActivity extends AppCompatActivity {
private TextView oneDay, twoDay, ThreeDay, fourDay, fiveDay, sixDay, sevenDay;
private EditText mEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
oneDay = (TextView) findViewById(R.id.one);
twoDay = (TextView) findViewById(R.id.two);
ThreeDay = (TextView) findViewById(R.id.three);
fourDay = (TextView) findViewById(R.id.four);
fiveDay = (TextView) findViewById(R.id.five);
sixDay = (TextView) findViewById(R.id.six);
sevenDay = (TextView) findViewById(R.id.seven);
mEditText = (EditText) findViewById(R.id.et);
}
String day1, day2, day3, day4, day5, day6, day7;
public void click(View view) {
switch (view.getId()) {
case R.id.today:
//分别得到这几天的日期
day1 = disposeDate(-3);
day2 = disposeDate(-2);
day3 = disposeDate(-1);
day4 = disposeDate(0);
day5 = disposeDate(1);
day6 = disposeDate(2);
day7 = disposeDate(3);
break;
case R.id.date:
//得到用户的输入
String input = mEditText.getText().toString().trim();
if (input.isEmpty() || input.length() < 8 || input.length() > 10) {
Toast.makeText(this, "格式不正确", Toast.LENGTH_SHORT).show();
} else {
day1 = disposeDate(input, -3);
day1 = disposeDate(input,-3);
day2 = disposeDate(input,-2);
day3 = disposeDate(input,-1);
day4 = disposeDate(input,0);
day5 = disposeDate(input,1);
day6 = disposeDate(input,2);
day7 = disposeDate(input,3);
}
break;
}
//放入数组
String[] date = {day1, day2, day3, day4, day5, day6, day7};
setTextDate(date);
}
/**
* 用来给textView赋值
*
* @param date
*/
private void setTextDate(String[] date) {
oneDay.setText(date[0]);
twoDay.setText(date[1]);
ThreeDay.setText(date[2]);
if (date[3].equals(disposeDate(0))) {
fourDay.setText(date[3] + "----->今天");
} else {
fourDay.setText(date[3] + "----->这是你输入的日期");
}
fiveDay.setText(date[4]);
sixDay.setText(date[5]);
sevenDay.setText(date[6]);
}
}
demo下载地址:
http://download.csdn.net/detail/dl10210950/9706236