根据日期计算星期小算法

来源:互联网 发布:淘宝网购物车 编辑:程序博客网 时间:2024/04/29 03:51

根据日期计算星期的公式有很多,下面介绍一个比较著名的——蔡勒(Zeller)公式,即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1。

公式中的符号含义如下:C是世纪数减一,y是年份后两位,M是月份,d是日数。1月和2月要按上一年的13月和14月来算,这时C和y均按上一年取值。

算出来的W除以7,余数是几就是星期几。如果余数是0,则为星期日。
这里需要注意:我在测试的时候发现有些日期算出来的w除以7的结果是负数(-1~-6),这时需要加7.

下面通过一个实例来演示:

Activity:

package com.home.week;import java.util.Calendar;import android.app.Activity;import android.app.DatePickerDialog;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.DatePicker;import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener {private Button setBtn;private TextView showDateText;private TextView showWeekText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);setBtn = (Button) findViewById(R.id.activity_main_btn);setBtn.setOnClickListener(this);showDateText = (TextView) findViewById(R.id.activity_main_tv_show_date);showWeekText = (TextView) findViewById(R.id.activity_main_tv_show_week);}@Overridepublic void onClick(View v) {getDateAndWeek();}/** * 弹出日期对话框并获取选择的日期和星期 */private void getDateAndWeek() {Calendar c = Calendar.getInstance();int year = 0;int mouth = 0;int day = 0;if (!"".equals(showDateText.getText().toString())) {String date = showDateText.getText().toString();String[] strs = date.split("-");year = Integer.parseInt(strs[0]);mouth = Integer.parseInt(strs[1]) - 1;day = Integer.parseInt(strs[2]);} else {year = c.get(Calendar.YEAR);mouth = c.get(Calendar.MONTH);day = c.get(Calendar.DAY_OF_MONTH);}// 直接创建一个DatePickerDialog对话框实例,并将它显示出来new DatePickerDialog(MainActivity.this,new DatePickerDialog.OnDateSetListener() {@Overridepublic void onDateSet(DatePicker view, int year,int monthOfYear, int dayOfMonth) {showDateText.setText(year + "-" + (monthOfYear + 1)+ "-" + dayOfMonth);int c = year / 100;int d = dayOfMonth;int y = year % 100;int m = monthOfYear + 1;if (m == 1 || m == 2) {y = year - 1;m = monthOfYear + 12;}// 运用Zeller公式计算星期int w = (y + (y / 4) + (c / 4) - 2 * c+ (26 * (m + 1) / 10) + d - 1) % 7;if (w < 0) {w += 7;}if (monthOfYear == 0 || monthOfYear == 1) {w += 2;}if (w >= 7) {w = w % 7;}String week = null;switch (w) {case 0:week = "日";break;case 1:week = "一";break;case 2:week = "二";break;case 3:week = "三";break;case 4:week = "四";break;case 5:week = "五";break;case 6:week = "六";break;default:break;}showWeekText.setText("星期" + week);}}// 设置初始日期, year, mouth, day).show();}}

布局XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <Button        android:id="@+id/activity_main_btn"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center"        android:text="设置日期" />    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="20dp" >        <TextView            android:id="@+id/activity_main_tv_show_date_prompt"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerHorizontal="true"            android:text="日期:" />        <TextView            android:id="@+id/activity_main_tv_show_date"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginLeft="30dp"            android:layout_toRightOf="@id/activity_main_tv_show_date_prompt" />    </RelativeLayout>    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="20dp" >        <TextView            android:id="@+id/activity_main_tv_show_week_prompt"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerHorizontal="true"            android:text="星期:" />        <TextView            android:id="@+id/activity_main_tv_show_week"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginLeft="30dp"            android:layout_toRightOf="@id/activity_main_tv_show_week_prompt" />    </RelativeLayout></LinearLayout>




 

 




 

原创粉丝点击