zoukankan      html  css  js  c++  java
  • 根据日期计算星期小算法

    根据日期计算星期的公式有很多,下面介绍一个比较著名的——蔡勒(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;
    
    	@Override
    	protected 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);
    	}
    
    	@Override
    	public 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() {
    
    					@Override
    					public 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>




     




     

  • 相关阅读:
    jquery blockUI插件实现遮罩层
    ckeditor粘入word内容如何默认设置为保留样式
    抓紧时间把c学习一下
    4G时代的解释
    。。。。
    几个常用的VS快捷键
    清除html标记并截取前50个字符
    SQL Server 2005 sp2安装后导入数据出错的处理方法
    自己做的一道机试题
    敏捷合同摘自网络
  • 原文地址:https://www.cnblogs.com/riskyer/p/3313069.html
Copyright © 2011-2022 走看看