关于计算某一天是星期几,是一年中的第几周的小结

最近在工作的时候需要实现这么一个功能,根据日历控件中选择的日期,计算出这一天是本年度的第几周,是星期几,关于获取星期几,C#中已经提供了方法DayOfWeek(),下面看看怎么计算第几周:

 

     /// <summary> 
        /// 取指定日期是一年中的第几周 
        /// </summary> 
        /// <param name="dtime">给定的日期</param> 
        /// <returns>数字 一年中的第几周</returns> 
        public int Weekofyear(DateTime dtime)
        {
            //int weeknum = 1;
            //DateTime tmpdate = DateTime.Parse(dtime.Year.ToString() + "-1" + "-1");
            //DayOfWeek firstweek = tmpdate.DayOfWeek;
            if(firstweek) 
            //for (int i = (int)firstweek + 1; i <= dtime.DayOfYear; i = i + 7)
            //{
            //    weeknum = weeknum + 1;
            //}
            //return weeknum ;

 public int Weekofyear(DateTime dtime)       

 {          //dtime为传进来的日期

 int weeknum = 1;   //默认的周数从1开始        

 DateTime firstdate = DateTime.Parse(dtime.Year.ToString() + "-1" + "-1");    //获取这一年的1月1号       

 DayOfWeek firstweek = firstdate .DayOfWeek;    //将1月1号作为第一周,不管是不是周一        

 for (int i = (int)firstweek + 1; i <= dtime.DayOfYear; i = i + 7)           

 {          //(int)firstweek + 1表示第一周还剩的天数,dtime.DayOfYear当前时间是本年中的第几天,七天为一周期

     weeknum = weeknum + 1;           

 }           

 return weeknum ;

上面的写法是本人自己写的,不过这个算法是把每年的1月1号作为起始点开始计算的,而不是将每年的第一个周一或周日作为起始点的,下面有一个改进的方法将每年的第一个周日作为起始点的,即如果1月1日不是周日,则不记为1,从下个周日开始计算,这个方法是根据他人的方法改编的

 public int Weekofyear(DateTime dtime)  

            DateTime dtmFisrtDay =DateTime.Parse(dtime.Year.ToString() + "-1" + "-1");  //获取这一年的1月1号

            string strWeek = dtmFisrtDay.DayOfWeek.ToString().ToLower(); ;

            int intweek = 0;

            switch (strWeek)

            {

                case "saturday":

                    intweek = 7;

                    break;

                case "friday":

                    intweek = 6;

                    break;

                case "thursday":

                    intweek = 5;

                    break;

                case "wednesday":

                    intweek = 4;

                    break;

                case "tuesday":

                    intweek = 3;

                    break;

                case "monday":

                    intweek = 2;

                    break;

                case "sunday":

                    intweek = 1;

                    break;

            }

            intweek = 8 - intweek;//第一周剩余的天数,为什么用8,因为在我的方法中周六是7,周日是开始1.   

            int intOutPut = 0;//要输出的周数   

            int intNow = dtime.DayOfYear; //当前是本年度的第几天

            intOutPut = intNow / 7; //计算出大概周数

            int intLoop = intNow % 7;  

            intLoop = intLoop - intweek;

            if (intLoop > 0) //说明所选择的日期不足一周

            {

             // 所选择的日期不足一周这样就会出现少算一周的情况,这时候就要对intOutPut的值进行修正。

                intOutPut = intOutPut + 1;

            }

            else

            {

                intOutPut = intOutPut + 0;

            }

            return intOutPut;

 

转载于:https://www.cnblogs.com/halia/archive/2010/04/05/1704761.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java实现历,GUI使用Swing,可以使用JFrame、JPanel、JLabel、JButton等Swing组件来实现。以下是一个简单的示例: ```java import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Calendar; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class CalendarDemo extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private JLabel monthLabel; // 份 private JButton prevMonthButton; // 上个 private JButton nextMonthButton; // 下个 private JPanel dayPanel; // 星期几和期 private int year; // 年份 private int month; // 份 public CalendarDemo() { super("历"); year = Calendar.getInstance().get(Calendar.YEAR); month = Calendar.getInstance().get(Calendar.MONTH); monthLabel = new JLabel(year + "年" + (month + 1) + ""); prevMonthButton = new JButton("上个"); nextMonthButton = new JButton("下个"); dayPanel = new JPanel(new GridLayout(7, 7)); prevMonthButton.addActionListener(this); nextMonthButton.addActionListener(this); // 添加星期几标签 dayPanel.add(new JLabel("星期")); dayPanel.add(new JLabel("星期一")); dayPanel.add(new JLabel("星期二")); dayPanel.add(new JLabel("星期三")); dayPanel.add(new JLabel("星期四")); dayPanel.add(new JLabel("星期五")); dayPanel.add(new JLabel("星期六")); // 添加期按钮 updateCalendar(); // 添加组件 add(monthLabel, BorderLayout.NORTH); add(prevMonthButton, BorderLayout.WEST); add(nextMonthButton, BorderLayout.EAST); add(dayPanel, BorderLayout.CENTER); // 设置窗口大小、位置和可见性 setSize(400, 400); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == prevMonthButton) { if (month == 0) { year--; month = 11; } else { month--; } } else if (e.getSource() == nextMonthButton) { if (month == 11) { year++; month = 0; } else { month++; } } monthLabel.setText(year + "年" + (month + 1) + ""); updateCalendar(); } private void updateCalendar() { dayPanel.removeAll(); // 添加星期几标签 dayPanel.add(new JLabel("星期")); dayPanel.add(new JLabel("星期一")); dayPanel.add(new JLabel("星期二")); dayPanel.add(new JLabel("星期三")); dayPanel.add(new JLabel("星期四")); dayPanel.add(new JLabel("星期五")); dayPanel.add(new JLabel("星期六")); // 获取当一天星期几 Calendar calendar = Calendar.getInstance(); calendar.set(year, month, 1); int firstDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); // 添加空白标签 for (int i = 1; i < firstDayOfWeek; i++) { dayPanel.add(new JLabel("")); } // 添加期按钮 calendar.set(Calendar.DATE, 1); while (calendar.get(Calendar.MONTH) == month) { JButton button = new JButton(String.valueOf(calendar.get(Calendar.DATE))); button.setBorder(BorderFactory.createEmptyBorder()); button.setBackground(Color.WHITE); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JButton button = (JButton) e.getSource(); System.out.println(button.getText()); } }); dayPanel.add(button); calendar.add(Calendar.DATE, 1); } // 补充空白标签 while (dayPanel.getComponentCount() < 49) { dayPanel.add(new JLabel("")); } // 重新绘制历 dayPanel.revalidate(); dayPanel.repaint(); } public static void main(String[] args) { new CalendarDemo(); } } ``` 上述代码,我们创建了一个继承自JFrame的类CalendarDemo,实现了ActionListener接口来处理按钮的点击事件。我们使用JLabel来显示当前份,使用JButton来显示期。在updateCalendar方法,我们使用GridLayout布局来排列星期几和期,使用Calendar类来获取当前份的第一天星期几,然后添加空白标签来占位,最后添加期按钮。我们可以通过点击期按钮来处理具体的业务逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值