生日剩余天数计算

女爷i 2022-07-16 21:12 338阅读 0赞

Birthday.class

  1. package com.example.sendmsg;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Calendar;
  4. import java.util.Date;
  5. import android.content.Context;
  6. import android.graphics.Bitmap;
  7. import android.util.Log;
  8. public class Birthday {
  9. private Context context;
  10. private Bitmap personIcon;
  11. private String name;
  12. private String datas;
  13. private String phone_number;
  14. private String day;
  15. private long days = 0;
  16. public Bitmap getPersonIcon() {
  17. return personIcon;
  18. }
  19. public void setPersonIcon(Bitmap personIcon) {
  20. this.personIcon = personIcon;
  21. }
  22. public String getName() {
  23. return name;
  24. }
  25. public void setName(String name) {
  26. this.name = name;
  27. }
  28. public String getDatas() {
  29. return datas;
  30. }
  31. public void setDatas(String datas) {
  32. this.datas = datas;
  33. }
  34. public String getPhone_number() {
  35. return phone_number;
  36. }
  37. public void setPhone_number(String phone_number) {
  38. this.phone_number = phone_number;
  39. }
  40. public String getDay() {
  41. return day;
  42. }
  43. public void setDay(String day) {
  44. this.day = day;
  45. }
  46. //剩余天数计算:
  47. public String getBirthday(String birthday) {
  48. //String birthday = "2013-03-18";
  49. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
  50. Calendar cal = Calendar.getInstance();
  51. int yearNow = cal.get(Calendar.YEAR);// 获得当前年份
  52. try {
  53. Log.i("Birthday_time", formatter.parse(birthday) + "");
  54. cal.setTime(formatter.parse(birthday));
  55. } catch (Exception e) {
  56. e.printStackTrace();
  57. }
  58. int birthyear = cal.get(Calendar.YEAR);
  59. Log.i("Birthday_year", birthyear + "");
  60. while (birthyear < yearNow) {
  61. cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + 1);
  62. birthyear = cal.get(Calendar.YEAR);
  63. Log.i("Birthday_year++", birthyear + "");
  64. }
  65. Date ed = new Date();
  66. Log.i("Date_ed", ed + "");
  67. Date sd = cal.getTime();
  68. Log.i("Date_sd", ed + "");
  69. days = 0;
  70. if ((ed.getTime() - sd.getTime()) / (3600 * 24 * 1000) < 0) {
  71. //>
  72. days = -((ed.getTime() - sd.getTime()) / (3600 * 24 * 1000)) + 1;
  73. System.out.println("距离你生日还有" + days + "天");
  74. } else {
  75. cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + 1);
  76. sd = cal.getTime();
  77. days = -((ed.getTime() - sd.getTime()) / (3600 * 24 * 1000)) + 1;
  78. System.out.println("距离你生日还有" + days + "天");
  79. }
  80. if(days == 366L) days = 1;
  81. if(days == 365L) days = 0;
  82. String days_ = Long.toString(days);
  83. return days_;
  84. }
  85. }

这是我写得一个小的生日记录的demo:(这里面包含了添加,删除,多是在一个Activity内,通讯录获取的可以不用写,跟上个博客连在一起的。)

birthdayActivity.class

  1. package com.example.sendmsg;
  2. import java.util.ArrayList;
  3. import java.util.Calendar;
  4. import java.util.Date;
  5. import java.util.Locale;
  6. import android.annotation.SuppressLint;
  7. import android.app.ActionBar;
  8. import android.app.Activity;
  9. import android.app.AlertDialog;
  10. import android.app.DatePickerDialog;
  11. import android.content.DialogInterface;
  12. import android.content.Intent;
  13. import android.os.Bundle;
  14. import android.view.View;
  15. import android.view.View.OnClickListener;
  16. import android.widget.AdapterView;
  17. import android.widget.AdapterView.OnItemClickListener;
  18. import android.widget.AdapterView.OnItemLongClickListener;
  19. import android.widget.Button;
  20. import android.widget.DatePicker;
  21. import android.widget.EditText;
  22. import android.widget.ImageView;
  23. import android.widget.LinearLayout;
  24. import android.widget.ListView;
  25. import android.widget.TextView;
  26. import android.widget.Toast;
  27. @SuppressLint("NewApi") public class BirthListActivity extends Activity{
  28. //1界面
  29. private ListView festival_list1;
  30. private ImageView image;
  31. private ImageView back_image;
  32. private TextView text_name;
  33. private BirthdayAdapter adapter;
  34. private ArrayList<Birthday> birth_lists = new ArrayList<Birthday>();
  35. //2界面
  36. private ListView person_list;
  37. private LinearLayout secondActivity;
  38. private TextView data;
  39. private EditText person;
  40. private Button search_btn;
  41. private Button add_main;
  42. private Button back;
  43. private LinearLayout add_person;
  44. private LinearLayout add_date;
  45. private int year,month,day;
  46. private String datas;
  47. private String days;
  48. private String number;
  49. private String name;
  50. private ArrayList<Birthday> personlist;
  51. @SuppressLint("NewApi") @Override
  52. protected void onCreate(Bundle savedInstanceState) {
  53. // TODO Auto-generated method stub
  54. super.onCreate(savedInstanceState);
  55. setContentView(R.layout.birth_list);
  56. festival_list1 = (ListView) findViewById(R.id.birth_list);
  57. image = (ImageView) findViewById(R.id.add_birthday);
  58. image.setBackgroundResource(R.drawable.add);
  59. back_image = (ImageView) findViewById(R.id.main_image);
  60. secondActivity = (LinearLayout) findViewById(R.id.secondActivity);
  61. back_image.setOnClickListener(new BackClick());
  62. InsertSqlite insql = new InsertSqlite(BirthListActivity.this);
  63. birth_lists = insql.selectAllBirth();
  64. adapter = new BirthdayAdapter(this, birth_lists);
  65. festival_list1.setAdapter(adapter);
  66. ActionBar actionBar = getActionBar();
  67. actionBar.hide();
  68. festival_list1.setOnItemLongClickListener(new BirthListClick());
  69. image.setOnClickListener(new OnClickListener() {
  70. @Override
  71. public void onClick(View arg0) {
  72. // TODO Auto-generated method stub
  73. festival_list1.setVisibility(arg0.GONE);
  74. secondActivity.setVisibility(arg0.VISIBLE);
  75. init();
  76. //初始化Calendar日历对象
  77. Calendar mycalendar=Calendar.getInstance(Locale.CHINA);
  78. Date mydate=new Date(); //获取当前日期Date对象
  79. mycalendar.setTime(mydate);为Calendar对象设置时间为当前日期
  80. year=mycalendar.get(Calendar.YEAR); //获取Calendar对象中的年
  81. month=mycalendar.get(Calendar.MONTH);//获取Calendar对象中的月
  82. day=mycalendar.get(Calendar.DAY_OF_MONTH);//获取这个月的第几天
  83. data.setText(year+"-"+(month+1)+"-"+day); //显示当前的年月日
  84. add_date.setOnClickListener(new Add_dataClick());
  85. add_main.setOnClickListener(new AddPersonClick());
  86. back.setOnClickListener(new BackOnclick());
  87. //通讯录
  88. search_btn.setOnClickListener(new PersonClick());
  89. person_list.setOnItemClickListener(new PersonList());
  90. }
  91. });
  92. }
  93. public void init(){
  94. data = (TextView) findViewById(R.id.data);
  95. person = (EditText) findViewById(R.id.person);
  96. search_btn = (Button) findViewById(R.id.search_btn);
  97. add_person = (LinearLayout) findViewById(R.id.add_person);
  98. add_date = (LinearLayout) findViewById(R.id.add_date);
  99. add_main = (Button) findViewById(R.id.add_main);
  100. back = (Button) findViewById(R.id.back);
  101. person_list = (ListView) findViewById(R.id.person_list);
  102. }
  103. //search
  104. class PersonClick implements OnClickListener{
  105. @Override
  106. public void onClick(View arg0) {
  107. // TODO Auto-generated method stub
  108. person_list.setVisibility(arg0.VISIBLE);
  109. InsertSqlite insql = new InsertSqlite(BirthListActivity.this);
  110. String name = person.getText().toString();
  111. if(name.isEmpty()){
  112. personlist = insql.getPhone();
  113. PersonAdapter personadapter = new PersonAdapter(BirthListActivity.this, personlist);
  114. person_list.setAdapter(personadapter);
  115. }else{
  116. personlist = insql.getPhone_num(name);
  117. if(personlist.size()>0){
  118. PersonAdapter personadapter = new PersonAdapter(BirthListActivity.this, personlist);
  119. person_list.setAdapter(personadapter);
  120. }else{
  121. Toast.makeText(BirthListActivity.this, "查无此人", Toast.LENGTH_LONG).show();
  122. }
  123. }
  124. }
  125. }
  126. //ListItem
  127. class PersonList implements OnItemClickListener{
  128. @Override
  129. public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
  130. long arg3) {
  131. // TODO Auto-generated method stub
  132. TextView text1 = (TextView) arg1.findViewById(R.id.phone_name);
  133. TextView text2 = (TextView) arg1.findViewById(R.id.phone_number);
  134. name = text1.getText().toString();
  135. number = text2.getText().toString();
  136. person.setText(name);
  137. }
  138. }
  139. class Add_dataClick implements OnClickListener{
  140. @Override
  141. public void onClick(View arg0) {
  142. // TODO Auto-generated method stub
  143. /**
  144. * 构造函数原型:
  145. * public DatePickerDialog (Context context, DatePickerDialog.OnDateSetListener callBack,
  146. * int year, int monthOfYear, int dayOfMonth)
  147. * content组件运行Activity,
  148. * DatePickerDialog.OnDateSetListener:选择日期事件
  149. * year:当前组件上显示的年,monthOfYear:当前组件上显示的月,dayOfMonth:当前组件上显示的第几天
  150. *
  151. */
  152. //创建DatePickerDialog对象
  153. DatePickerDialog dpd=new DatePickerDialog(BirthListActivity.this,Datelistener,year,month,day);
  154. dpd.show();//显示DatePickerDialog组件
  155. }
  156. private DatePickerDialog.OnDateSetListener Datelistener=new DatePickerDialog.OnDateSetListener()
  157. {
  158. /**params:view:该事件关联的组件
  159. * params:myyear:当前选择的年
  160. * params:monthOfYear:当前选择的月
  161. * params:dayOfMonth:当前选择的日
  162. */
  163. @Override
  164. public void onDateSet(DatePicker view, int myyear, int monthOfYear,int dayOfMonth) {
  165. //修改year、month、day的变量值,以便以后单击按钮时,DatePickerDialog上显示上一次修改后的值
  166. year=myyear;
  167. month=monthOfYear;
  168. day=dayOfMonth;
  169. //更新日期
  170. updateDate();
  171. }
  172. //当DatePickerDialog关闭时,更新日期显示
  173. private void updateDate()
  174. {
  175. //在TextView上显示日期
  176. Birthday bir = new Birthday();
  177. datas = year+"-"+(month+1)+"-"+day;
  178. days = bir.getBirthday(datas);
  179. data.setText(datas);
  180. // Toast.makeText(DataRemind.this, "data:"+datas, Toast.LENGTH_LONG).show();
  181. }
  182. };
  183. }
  184. class AddPersonClick implements OnClickListener{
  185. @Override
  186. public void onClick(View arg0) {
  187. // TODO Auto-generated method stub
  188. InsertSqlite insql = new InsertSqlite(BirthListActivity.this);
  189. String name = person.getText().toString();
  190. Birthday bir = new Birthday();
  191. datas = year+"-"+(month+1)+"-"+day;
  192. days = bir.getBirthday(datas);
  193. data.setText(datas);
  194. datas = data.getText().toString();
  195. if(name.isEmpty()){
  196. Toast.makeText(BirthListActivity.this, "请检查名字或日期", Toast.LENGTH_LONG).show();
  197. }else{
  198. boolean bool = insql.insertBirthday(name, datas, days, number);
  199. if(bool){
  200. Toast.makeText(BirthListActivity.this, "添加成功!", Toast.LENGTH_LONG).show();
  201. secondActivity.setVisibility(arg0.GONE);
  202. festival_list1.setVisibility(arg0.VISIBLE);
  203. }else{
  204. Toast.makeText(BirthListActivity.this, "添加失败", Toast.LENGTH_LONG).show();
  205. }
  206. }
  207. }
  208. }
  209. class BackOnclick implements OnClickListener{
  210. @Override
  211. public void onClick(View arg0) {
  212. // TODO Auto-generated method stub
  213. secondActivity.setVisibility(arg0.GONE);
  214. festival_list1.setVisibility(arg0.VISIBLE);
  215. }
  216. }
  217. class BirthListClick implements OnItemLongClickListener{
  218. @Override
  219. public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
  220. int arg2, long arg3) {
  221. // TODO Auto-generated method stub
  222. text_name = (TextView) findViewById(R.id.birth_name);
  223. //设置对话框标题
  224. new AlertDialog.Builder(BirthListActivity.this).setTitle("系统提示")
  225. .setMessage("是否删除此人生日").setPositiveButton("确定", new DialogInterface.OnClickListener() {
  226. @Override
  227. public void onClick(DialogInterface arg0, int arg1) {
  228. // TODO Auto-generated method stub
  229. InsertSqlite insql = new InsertSqlite(BirthListActivity.this);
  230. String name = text_name.getText().toString();
  231. Boolean bool = insql.deleteBirth(name);
  232. if(bool){
  233. Toast.makeText(BirthListActivity.this, "删除成功", Toast.LENGTH_LONG).show();
  234. }else{
  235. Toast.makeText(BirthListActivity.this, "删除失败", Toast.LENGTH_LONG).show();
  236. }
  237. }
  238. }).setNegativeButton("取消", new DialogInterface.OnClickListener(){
  239. @Override
  240. public void onClick(DialogInterface arg0, int arg1) {
  241. // TODO Auto-generated method stub
  242. }
  243. }).show();
  244. return false;
  245. }
  246. }
  247. class BackClick implements OnClickListener{
  248. @Override
  249. public void onClick(View arg0) {
  250. // TODO Auto-generated method stub
  251. finish();
  252. }
  253. }
  254. }

birthdayAdapter

  1. package com.example.sendmsg;
  2. import java.util.ArrayList;
  3. import android.content.Context;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.widget.BaseAdapter;
  8. import android.widget.ImageView;
  9. import android.widget.LinearLayout;
  10. import android.widget.TextView;
  11. public class BirthdayAdapter extends BaseAdapter{
  12. ArrayList<Birthday> birth_list = new ArrayList<Birthday>();
  13. private LayoutInflater inflater = null;
  14. private Context context;
  15. public BirthdayAdapter(Context context,ArrayList<Birthday> birth_list){
  16. this.inflater = LayoutInflater.from(context);
  17. this.birth_list = birth_list;
  18. this.context = context;
  19. }
  20. @Override
  21. public int getCount() {
  22. // TODO Auto-generated method stub
  23. return birth_list.size();
  24. }
  25. @Override
  26. public Object getItem(int arg0) {
  27. // TODO Auto-generated method stub
  28. return null;
  29. }
  30. @Override
  31. public long getItemId(int arg0) {
  32. // TODO Auto-generated method stub
  33. return 0;
  34. }
  35. @Override
  36. public View getView(int arg0, View arg1, ViewGroup arg2) {
  37. // TODO Auto-generated method stub
  38. Viewholder holder = null;
  39. if(arg1 == null){
  40. holder = new Viewholder();
  41. arg1 = inflater.inflate(R.layout.birth_listitem, null);
  42. holder.birth_image = (ImageView) arg1.findViewById(R.id.birth_image);
  43. holder.birth_person = (TextView) arg1.findViewById(R.id.birth_name);
  44. holder.birth_data = (TextView) arg1.findViewById(R.id.birth_data);
  45. holder.birth_sdata = (TextView) arg1.findViewById(R.id.birth_sdata);
  46. arg1.setTag(holder);
  47. }else{
  48. holder = (Viewholder) arg1.getTag();
  49. }
  50. holder.birth_person.setText(birth_list.get(arg0).getName());
  51. holder.birth_data.setText(birth_list.get(arg0).getDatas());
  52. holder.birth_sdata.setText("剩余天数还有"+birth_list.get(arg0).getDay()+"天");
  53. return arg1;
  54. }
  55. class Viewholder{
  56. public ImageView birth_image;
  57. public TextView birth_person,birth_data,birth_sdata;
  58. }
  59. }

birthday.xml

  1. 这里写代码片<?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6. <LinearLayout
  7. android:layout_width="fill_parent"
  8. android:layout_height="50dp"
  9. android:orientation="horizontal"
  10. android:background="#1f1c1c"
  11. >
  12. <ImageView
  13. android:layout_width="30dp"
  14. android:layout_height="30dp"
  15. android:layout_gravity="center_vertical"
  16. android:layout_marginLeft="5dp"
  17. android:id="@+id/main_image"
  18. android:background="@drawable/back_selector"
  19. />
  20. <TextView
  21. android:layout_width="wrap_content"
  22. android:layout_height="wrap_content"
  23. android:id="@+id/title"
  24. android:layout_gravity="center_vertical"
  25. android:layout_marginLeft="10dp"
  26. android:text="生日提醒"
  27. android:textSize="20dp"
  28. android:textColor="#ffffff"
  29. />
  30. <LinearLayout
  31. android:layout_width="fill_parent"
  32. android:layout_height="50dp"
  33. android:gravity="right"
  34. android:orientation="horizontal"
  35. android:background="#1f1c1c"
  36. >
  37. <ImageView
  38. android:layout_width="30dp"
  39. android:layout_height="30dp"
  40. android:layout_gravity="center_vertical|right"
  41. android:layout_marginRight="10dp"
  42. android:id="@+id/add_birthday"
  43. android:background="@drawable/add"
  44. />
  45. </LinearLayout>
  46. </LinearLayout>
  47. <ListView
  48. android:layout_width="match_parent"
  49. android:layout_height="match_parent"
  50. android:paddingLeft="5dp"
  51. android:paddingRight="5dp"
  52. android:id="@+id/birth_list"
  53. android:visibility="visible"/>
  54. <LinearLayout
  55. android:layout_width="match_parent"
  56. android:layout_height="match_parent"
  57. android:orientation="vertical"
  58. android:visibility="gone"
  59. android:id="@+id/secondActivity">
  60. <LinearLayout
  61. android:layout_width="fill_parent"
  62. android:layout_height="wrap_content"
  63. android:orientation="horizontal"
  64. android:paddingTop="10dp"
  65. android:paddingLeft="10dp"
  66. android:paddingRight="10dp"
  67. android:id="@+id/add_date"
  68. >
  69. <ImageView
  70. android:layout_width="30dp"
  71. android:layout_height="30dp"
  72. android:id="@+id/date_image"
  73. android:background="@drawable/date"
  74. />
  75. <TextView
  76. android:layout_width="fill_parent"
  77. android:layout_height="wrap_content"
  78. android:gravity="center_horizontal|center_vertical"
  79. android:id="@+id/data"
  80. android:text="@null"
  81. android:textSize="18dp"
  82. />
  83. </LinearLayout>
  84. <LinearLayout
  85. android:layout_width="fill_parent"
  86. android:layout_height="wrap_content"
  87. android:orientation="horizontal"
  88. android:paddingTop="20dp"
  89. android:paddingLeft="10dp"
  90. android:paddingRight="10dp"
  91. android:id="@+id/add_person"
  92. >
  93. <ImageView
  94. android:layout_width="30dp"
  95. android:layout_height="30dp"
  96. android:layout_gravity="center_vertical"
  97. android:id="@+id/person_image"
  98. android:background="@drawable/person"
  99. />
  100. <LinearLayout
  101. android:layout_width="fill_parent"
  102. android:layout_height="wrap_content"
  103. android:paddingLeft="30dp"
  104. android:orientation="horizontal"
  105. >
  106. <EditText
  107. android:layout_width="200dp"
  108. android:layout_height="wrap_content"
  109. android:id="@+id/person"
  110. android:hint="@string/person"
  111. />
  112. <Button
  113. android:layout_width="wrap_content"
  114. android:layout_height="wrap_content"
  115. android:layout_marginLeft="20dp"
  116. android:id="@+id/search_btn"
  117. android:text="@string/search"
  118. />
  119. </LinearLayout>
  120. </LinearLayout>
  121. <LinearLayout
  122. android:layout_width="fill_parent"
  123. android:layout_height="fill_parent"
  124. android:orientation="vertical"
  125. android:paddingLeft="10dp"
  126. android:paddingRight="10dp"
  127. android:paddingBottom="10dp"
  128. >
  129. <ListView
  130. android:layout_width="match_parent"
  131. android:layout_height="wrap_content"
  132. android:paddingLeft="5dp"
  133. android:paddingRight="5dp"
  134. android:id="@+id/person_list"
  135. android:visibility="invisible"
  136. ></ListView>
  137. <LinearLayout
  138. android:layout_width="fill_parent"
  139. android:layout_height="fill_parent"
  140. android:orientation="horizontal"
  141. android:paddingLeft="10dp"
  142. android:paddingRight="10dp"
  143. android:paddingBottom="10dp"
  144. >
  145. <Button
  146. android:layout_width="fill_parent"
  147. android:layout_height="wrap_content"
  148. android:layout_weight="1"
  149. android:layout_gravity="bottom"
  150. android:id="@+id/add_main"
  151. android:text="@string/add_person"
  152. />
  153. <Button
  154. android:layout_width="fill_parent"
  155. android:layout_height="wrap_content"
  156. android:layout_weight="1"
  157. android:layout_gravity="bottom"
  158. android:id="@+id/back"
  159. android:text="@string/back"
  160. />
  161. </LinearLayout>
  162. </LinearLayout>
  163. </LinearLayout>
  164. </LinearLayout>

birthdayitem.xml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="horizontal"
  6. android:paddingLeft="10dp"
  7. android:paddingTop="10dp"
  8. android:paddingBottom="10dp"
  9. android:paddingRight="10dp"
  10. android:descendantFocusability="afterDescendants"><!-- 给每个item增加background -->
  11. <ImageView
  12. android:layout_width="30dp"
  13. android:layout_height="30dp"
  14. android:id="@+id/birth_image"
  15. android:background="@drawable/birthday"
  16. android:layout_gravity="center_vertical|left"
  17. />
  18. <LinearLayout
  19. android:layout_width="fill_parent"
  20. android:layout_height="wrap_content"
  21. android:gravity="center_vertical"
  22. android:orientation="vertical"
  23. >
  24. <LinearLayout
  25. android:layout_width="fill_parent"
  26. android:layout_height="fill_parent"
  27. android:orientation="horizontal"
  28. android:gravity="center_vertical"
  29. >
  30. <TextView
  31. android:layout_width="fill_parent"
  32. android:layout_height="fill_parent"
  33. android:layout_weight="1"
  34. android:paddingLeft="10dp"
  35. android:id="@+id/birth_name"
  36. />
  37. <TextView
  38. android:layout_width="fill_parent"
  39. android:layout_height="fill_parent"
  40. android:layout_weight="1"
  41. android:gravity="center_vertical|right"
  42. android:id="@+id/birth_data"
  43. />
  44. </LinearLayout>
  45. <TextView
  46. android:layout_width="fill_parent"
  47. android:layout_height="fill_parent"
  48. android:paddingLeft="10dp"
  49. android:id="@+id/birth_sdata"
  50. />
  51. </LinearLayout>
  52. </LinearLayout>

http://blog.csdn.net/chindroid/article/details/8000713
这里的一个visibility的应用。

发表评论

表情:
评论列表 (有 0 条评论,338人围观)

还没有评论,来说两句吧...

相关阅读