根据日期计算星期小算法
来源:互联网 发布:淘宝网购物车 编辑:程序博客网 时间: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>
- 根据日期计算星期小算法
- 根据日期计算星期
- 根据日期计算星期
- 根据日期计算星期几
- 根据日期计算星期几
- C根据日期计算星期
- 基姆拉尔森计算公式(根据日期判断星期)
- 根据已知日期计算星期几
- 推导基姆拉尔森公式根据日期计算星期
- iOS根据当前日期计算星期几
- 根据日期计算是星期几
- Java 根据日期计算星期几
- 基姆拉尔森公式根据日期计算星期
- 推导基姆拉尔森公式根据日期计算星期
- iOS根据当前日期计算星期几
- 推导基姆拉尔森公式根据日期计算星期
- 推导基姆拉尔森公式根据日期计算星期
- Java 根据日期计算星期几
- “Valid signing identity not found” 错误
- hdu 4709 Herding
- ”PBXCp Error“ 错误
- struts2中的配置文件的<constant>标签(struts.xml自动加载)
- win32多线程程序设计笔记(第二章)
- 根据日期计算星期小算法
- java图片程序裁剪图片
- MULE ESB发布CXF服务
- 某些手机就会出现锁屏崩溃问题。COCOS2D-X 2.1.3 ANDROID
- ajax,提交数据,浏览器乱码,编码问题
- Java中getBytes()的用法
- OMNeT++ INET OverSim
- APNS设置
- 什么是软件设计师