精华内容
下载资源
问答
  • 2018-03-17 19:33:14

    一、在我们的日常开发中,要用到统计某个时间段的数据,而特定的时间点需要我们用程序来获取!

    比如说要统计上个月的数据,则需要知道上个月开始时间和结束时间!

    php要获取时间需要用到的函数:time(), date(),strtotime(),等等

    strtotime()是一个功能比较强大的函数,可以很方便的获取到我们想要的时间戳,然后通过配合date()函数获取我们所需要的时间点!

     

    //当月的天数,某月的天数
    $month_days = date('t');
    $month_days2 = date('t',strtotime('2017-2-6'));
    echo $month_days.'---'.$month_days2;
    echo "<br />";
    
    
    //这个月的第一天的日期,这个月的最后一天的日期
    $now_month_first_date = date('Y-m-1');
    $now_month_last_date  = date('Y-m-d',strtotime(date('Y-m-1',strtotime('next month')).'-1 day'));
    echo '当月第一天日期'.$now_month_first_date.'当月最后一天的日期'.$now_month_last_date;
    echo "<br />";
    
    
    //上个月第一天的日期格式,上个月最后一天的日期格式
    $last_mont_first_date = date('Y-m-1',strtotime('last month'));
    $last_mont_end_date = date('Y-m-d',strtotime(date('Y-m-1').'-1 day'));
    echo '上个月第一天的日期格式'.$last_mont_first_date.'上个月最后一天的日期格式'.$last_mont_end_date;
    echo "<br />";
    
    
    //下个月的第一天时间日期 ,下个月的最后一天时间日期
    $next_mont_first_date = date('Y-m-1',strtotime('next month'));
    $next_mont_end_date = date('Y-m-d',strtotime(date('Y-m-1',strtotime('next month')).'+1 month -1 day'));
    echo '下个月的第一天时间日期'.$next_mont_first_date.'下个月的最后一天时间日期'.$next_mont_end_date;
    echo "<br />";
    
    
    //今日开始-结束时间戳
    $start_time = strtotime(date('Y-m-d 00:00:00',time()));
    $end_time   = ($start_time+86400);
            
    //本周开始-结束时间戳
    $start_time = mktime(0, 0 , 0,date("m"),date("d")-date("w")+1,date("Y"));
    $end_time   = mktime(23,59,60,date("m"),date("d")-date("w")+7,date("Y"));
            
    //本月开始-结束时间戳
    $start_time = strtotime(date('Y-m-1').'-1 day')+24*60*60;
    $end_time   = strtotime(date('Y-m-1 00:00:00',strtotime('next month')));
           
    //本年开始时间-结束时间戳
    $start_time = strtotime(date('Y-1-1 00:00:00',time()));
    $end_time   = strtotime(date('Y-1-1 00:00:00',strtotime('+1 year')));
           

    二、data() 函数:

    在页面的最前页加上
    date_default_timezone_set(PRC);   /*把时间调到北京时间,php5默认为格林威治标准时间*/
    date ()
    a:   "am"或是"pm" 
    A:   "AM"或是"PM" 
    d:   几日,两位数字,若不足则补零;从"01"至"31" 
    D:    星期几,3个英文字母,如:"Fri" 
    F:    月份,英文全名,如:"January" 
    h:    12小时制的小时,从"01"至"12" 
    H:    24小时制的小时,从"00"至"23" 
    g:    12小时制的小时,不补零;从"1"至"12" 
    G:    24小时制的小时,不补零;从"0"至"23" 
    j:    几日,不足不被零;从"1"至"31" 
    l:    星期几,英文全名,如:"Friday" 
    m:    月份,两位数字,从"01"至"12" 
    n:    月份,两位数字,不补零;从"1"至"12" 
    M:    月份,3个英文字母;如:"Jan" 
    s:   秒;从"00"至"59" 
    S:    字尾加英文序数,两个英文字母,如:"21th" 
    t:    指定月份的天数,从"28"至"31" 
    U:    总秒数 
    w:    数字型的星期几,从"0(星期天)"至"6(星期六)" 
    Y:    年,四位数字 
    y:    年,两位数字 
    z: 一年中的第几天;从"1"至"366"
    ==================================================================
    1,年-月-日
    表示年可以用大写的Y和小写y;
    表示月可以用大写F、大写M、小写m和小写n(分别表示字符和数字的两种方式);
    表示日可以用小写d和小写j,大写S表示日期的后缀。
    echo date('Y-m-j');
    2007-02-6
    echo date('y-n-j');
    07-2-6
    大写Y表示年四位数字,而小写y表示年的两位数字;
    小写m表示月份的数字(带前导),而小写n则表示不带前导的月份数字。
    echo date('Y-M-j');
    2007-Feb-6
    echo date('Y-m-d');
    2007-02-06
    大写M表示月份的3个缩写字符,而小写m则表示月份的数字(带前导0);
    没有大写的J,只有小写j表示月份的日期,无前导o;若需要月份带前导则使用小写d。
    echo date('Y-M-j');
    2007-Feb-6
    echo date('Y-F-jS');
    2007-February-6th
    大写M表示月份的3个缩写字符,而大写F表示月份的英文全写。(没有小写f)
    大写S表示日期的后缀,比如“st”、“nd”、“rd”和“th”,具体看日期数字为何。
    2,时:分:秒
    默认情况下,PHP解释显示的时间为“格林威治标准时间”,与我们本地的时间相差8个小时。
    echo date('g:i:s a');
    5:56:57 am
    echo date('h:i:s A');
    05:56:57 AM
    小写g表示12小时制,无前导0,而小写h则表示有前导0的12小时制。
    当使用12小时制时需要表明上下午,小写a表示小写的“am”和“pm”,大写A表示大写的“AM”和“PM”。
    echo date('G:i:s');
    14:02:26
    大写G表示24小时制的小时数,但是不带前导的;使用大写的H表示带前导的24小时制小时数
    小结:
    字母g表示小时不带前导,字母h表示小时带前导;
    小写g、h表示12小时制,大写G、H表示24小时制。
    3,闰年、星期、天
    echo date('L');
    今年是否闰年:0
    echo date('l');
    今天是:Tuesday
    echo date('D');
    今天是:Tue
    大写L表示判断今年是否闰年,布尔值,为真返回1,否则为0;
    小写l表示当天是星期几的英文全写(Tuesday);
    而使用大写D表示星期几的3个字符缩写(Tue)。
    echo date('w');
    今天星期:2
    echo date('W');
    本周是全年中的第 06 周
    小写w表示星期几,数字形式表示
    大写W表示一年中的星期数
    echo date('t');
    本月是 28 天
    echo date('z');
    今天是今年的第 36 天
    小写t表示当前月份又多少天
    小写z表示今天是本年中第几天
    4,其他
    echo date('T');
    UTC
    大写T表示服务器的时间区域设置
    echo date('I');
    0
    大写I表示判断当前是否为夏令时,为真返回1,否则为0
    echo date('U');
    1170769424
    大写U表示从1970年1月1日到现在的总秒数,就是Unix时间纪元的UNIX时间戳。
    echo date('c');
    2007-02-06T14:24:43+00:00
    小写c表示ISO8601日期,日期格式为YYYY-MM-DD,用字母T来间隔日期和时间,时间格式为HH:MM:SS,时区使用格林威治标准时间(GMT)的偏差来表示。
    echo date('r');
    Tue, 06 Feb 2007 14:25:52 +0000
    小写r表示RFC822日期。
    5、格式化时间
    echo $row["t_time"];    将输出 2008-2-29 12:08:00
    echo date("Y-m-d",strtotime($row["t_time"]));   将输出 2008-2-29
    注,由于$row["t_time"]得到的时间已经是一个字符串,所以需要用strtotime( 字串转时间戳)转一下,否则输出1970-01-01的错误 

    链接来自:http://www.cnblogs.com/glory-jzx/archive/2012/09/29/2708396.html

     三、mktime() 函数

    php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法,主要使用到了 php 的时间函数 mktime()。

    mktime函数用法如下:mktime(hour,minute,second,month,day,year,is_dst)

    参数描述

    hour  可选。规定小时。

    minute 可选。规定分钟。

    second 可选。规定秒。

    month  可选。规定用数字表示的月。

    day   可选。规定天。

    year  可选。规定年。在某些系统上,合法值介于 1901 - 2038 之间。不过在 PHP 5 中已经不存在这个限制了。

    is_dst 可选。如果时间在日光节约时间(DST)期间,则设置为1,否则设置为0,若未知,则设置为-1。(自 PHP 5.1.0 起,本参数已被废弃。应该使用新的时区处理特性来替代。)

    例子:今日、昨日、上周、本月的起始时间戳和结束时间戳

     1  //获取今日开始时间戳和结束时间戳
     2  $start = mktime(0,0,0,date('m'),date('d'),date('Y'));
     3  $end = mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1;
     4  //获取昨日起始时间戳和结束时间戳
     5  $beginYesterday = mktime(0,0,0,date('m'),date('d')-1,date('Y'));
     6  $endYesterday = mktime(0,0,0,date('m'),date('d'),date('Y'))-1;
     7  //获取上周起始时间戳和结束时间戳
     8  $beginLastweek = mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y'));
     9  $endLastweek = mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y'));
    10  //获取本月起始时间戳和结束时间戳
    11  $beginThismonth=mktime(0,0,0,date('m'),1,date('Y'));
    12  $endThismonth=mktime(23,59,59,date('m'),date('t'),date('Y'));

    链接来自:https://www.cnblogs.com/ding-daisy/p/6018918.html

     

     

     

     

    更多相关内容
  • 利用LocalDate获取每月几号,每周

    万次阅读 2018-12-08 23:23:43
    下面的工具类即利用LocalDate来获取指定范围内的日期,每周四,每31(没有则略过) import java.time.DayOfWeek; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time....

           jdk8为我们提供了非常好用的时间日期工具类。我们可以使用LocalDate 、LocalTime 、LocalDateTime来表示日期和时间,拥有极为方便的API满足业务需求,并且和数据库的字段可直接对应。这几个可以满足开发中的所有需求,极力推荐使用,请彻底放弃那些难用的Date 、Calendar吧!

    Java8中的时间核心功能类如下:

    描述
    LocalTime只包含时间,如05:08:45
    LocalDate只包含日期 如2019-02-05
    LocalDateTime日期与时间,如2019-02-05 05:08:45(无时区)
    ZonedOffset时区的偏移量,如 +08:00
    ZonedDateTime包含时区的日期与时间
    Instant时间戳,表达为“1970年初到这个时间点一共经过了多少纳秒
    Duration表达一段时间,可以说Duration是两个Instant之间的时间差
    Period时间段
    Clock时钟
    DateTimeFormatter负责格式化转换,内置了许多常用的格式。替换了之前的simpleDateFormatter

    Java 7中包含下表中列出的类与方法:(这里仅作为一个回顾,推荐使用上面介绍的java8中新的日期类)

    描述
    System.currentTimeMillis()一个静态方法,返回当前日期时间(从1970年初到当前时间,经过了多少毫秒)
    java.util.Date用于表示日期和时间的类,大多数里头的方法已经不推荐使用了(deprecated).
    java.sql.Date用于表示日期的类,所有时间信息全被砍掉了,一般在数据库连接时使用
    java.sql.Timestamp同上,只是保留了时间信息。
    java.util.Calendar一个Calendar的基本类,可以对日期和时间进行操作,如加一天、一月、一年等等。
    java.util.TimeZone用于表达时区的类,当跨时区进行Calendar操作时很有用。
    SimpleDateFormat帮助把字符串解析为Date的类,同时也可将Date格式化为字符串。

    在时间与字符串转换时经常会用到的表示:

    y   = 年份 (yy or yyyy)
    M   = 月份 (MM)
    d   = 一个月中的第几天      (dd)
    h   = 小时 (0-12)  (hh)
    H   = 小时 (0-23)  (HH)
    m   = 一小时中的第几分钟 (mm)
    s   = 秒   (ss)
    S   = 毫秒 (SSS)
    z   = 时区 (比如:Pacific Standard Time)
    Z   = 时区的时差 (比如:-0800)
    
    
    yyyy-MM-dd           (2009-12-31)
    yyyy-MM-dd HH:mm:ss  (2009-12-31 23:59:59)
    HH:mm:ss.SSS         (23:59.59.999)
    yyyy-MM-dd HH:mm:ss.SSS   (2009-12-31 23:59:59.999)
    
     // 两个都是ISO的标准时间格式,即2019-12-05T11:27:55.517+08:00
     public static final String DATE_FORMAT_ISO = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ";
     public static final String DATE_FORMAT_ISO_2 = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
    

    1. 下面的工具类即利用LocalDate来获取指定范围内的日期,每周四,每月31号(没有则略过)

    
    import java.time.DayOfWeek;
    import java.time.LocalDate;
    import java.time.format.DateTimeFormatter;
    import java.time.temporal.ChronoUnit;
    import java.time.temporal.TemporalField;
    import java.time.temporal.WeekFields;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    /**
     * @author 94977
     * @create 2018/12/8
     */
    public class DateUtil {
    
    
        public static final String DATE_FORMAT_YYYY_MM_DD = "yyyy-MM-dd";
    
    
        public static LocalDate getLocalDateByStr(String str){
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_FORMAT_YYYY_MM_DD);
           return LocalDate.parse(str, formatter);
        }
    
        /**
        * 获取指定日期范围内的所有指定星期 包含开始日期和结束日期
         * @param weeks 1,3,7表示周一,周三,周日
        * @return List<LocalDate>
        */
       public static List<LocalDate> getWeekLocalDateListByRange(LocalDate startDay, LocalDate endDay, List<String> weeks) {
            List<LocalDate> localDateList = new ArrayList<>();
            TemporalField fieldISO = WeekFields.of(DayOfWeek.of(1), 1).dayOfWeek();
            LocalDate tempDay;
            for (String week : weeks) {
                tempDay = startDay.with(fieldISO, Long.parseLong(week));
                if (tempDay.isBefore(startDay)) {
                    tempDay = tempDay.plusWeeks(1);
                }
                while (tempDay.isBefore(endDay) || tempDay.isEqual(endDay)) {
                    localDateList.add(tempDay);
                    tempDay = tempDay.plusWeeks(1);
                }
            }
            return localDateList;
        }
    
        /**
         * 获取指定日期范围内的所有指定dayOfMonth 包含开始日期和结束日期
         * @param months 1,29,31表示每月的1号,29号,31号
         * @return List<LocalDate>
         */
        public static List<LocalDate> getLocalDateListByMonth(LocalDate startDate,LocalDate endDate,List<String> months){
            List<LocalDate> localDateList = new ArrayList<>();
    
            LocalDate localDate; 
            for(String month : months){
           		 LocalDate tempDate = startDate;
                while (tempDate.isBefore(endDate) || tempDate.getMonthValue() == endDate.getMonthValue()){
                    if(tempDate.lengthOfMonth() >= Integer.valueOf(month)){
                        localDate = tempDate.withDayOfMonth(Integer.valueOf(month));
                        if(localDate.isAfter(startDate) || localDate.isEqual(startDate)){
                            localDate = tempDate.withDayOfMonth(Integer.valueOf(month));
                            if(localDate.isEqual(endDate) || localDate.isBefore(endDate)){
                                localDateList.add(localDate);
                            }
                        }
                    }
                    tempDate = tempDate.plusMonths(1);
                }
            }
            return localDateList;
        }
    
        /**
        * 获取指定范围内所有日期,包含开始日期和结束日期
        * @return List<LocalDate>
        */
        public static List<LocalDate> getLocalDateByDay(LocalDate startDate,LocalDate endDate){
            List<LocalDate> localDateList = Stream.iterate(startDate, date -> date.plusDays(1)).
                    limit(ChronoUnit.DAYS.between(startDate, endDate))
                    .collect(Collectors.toList());
            localDateList.add(endDate);
            return localDateList;
        }
    
        public static void main(String[] args) {
            LocalDate startDate = getLocalDateByStr("2018-10-27");
            LocalDate endDate = getLocalDateByStr("2018-11-05");
            System.out.println(getLocalDateByDay(startDate,endDate));
            List<String> strings = new ArrayList<>();
            strings.add("31");
            List<LocalDate> localDateListByweek = getLocalDateListByMonth(startDate, endDate, strings);
            System.out.println(localDateListByweek);
        }
    
    }
    
    

    2. 获取当天最晚和最早的时间

    	public static final String DATE_FORMAT_ISO_8601 = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
    
        /**
         * 转为ISO8601标准时间 2018-12-12T14:03:27.505+0800,使用默认时区
         * @param localDateTime localDateTime
         */
        public static String getStandardTime(LocalDateTime localDateTime){
            DateTimeFormatter pattern = DateTimeFormatter.ofPattern(DATE_FORMAT_ISO_8601);
            ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.systemDefault());
            return pattern.format(zonedDateTime);
        }
    
        /**
         * 返回当天最晚的时间2018-12-16T23:59:59.000+0800,使用默认时区
         * @param localDate localDate
         */
        public static String getEndTime(LocalDate localDate){
            return getStandardTime(localDate.plusDays(1).atStartOfDay().minusSeconds(1));
        }
    
        /**
         * 返回当天最早的时间2018-12-16T00:00:00.000+0800,使用默认时区
         * @param localDate localDate
         */
        public static String getStartTime(LocalDate localDate){
            return getStandardTime(localDate.atStartOfDay());
        }
    
    展开全文
  • 获取某的第一和最后个星期

    千次阅读 2017-04-15 01:19:11
    想着获取当前是第周,先获取开学那天,看了两年的校历好像是9月份第一个星期一和2月份最后个星期一。

    想着获取当前是第几周,先获取开学那天,看了两年的校历好像是9月份第一个星期一和2月份最后个星期一。

    如下图9月第一个星期一是9月5号
    9月

    最后个星期一是2月27号
    2月

    代码如下

    
    class DayUtils{
        /**
         * 指定年月的第一个星期一
         * @param year
         * @param month
         */
        static void firstMonday(int year, int month){
            Calendar cal = Calendar.getInstance();
            cal.set(Calendar.YEAR, year);
            cal.set(Calendar.MONTH, month - 1); //从0开始
            int day = 1;
            cal.set(Calendar.DAY_OF_MONTH, day);    //从第一天开始找第一个星期一
            while(cal.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY){
                cal.set(Calendar.DAY_OF_MONTH, ++day);
            }
            Date firstMonday = cal.getTime();
            String dtStr = new SimpleDateFormat("yyyy-MM-dd").format(firstMonday);
            System.out.println(dtStr);
        }
    
        /**
         * 指定年月的最后个星期一
         * @param year
         * @param month
         */
        static void lastMonday(int year, int month){
            Calendar cal = Calendar.getInstance();
            cal.set(Calendar.YEAR, year);
            cal.set(Calendar.MONTH, month - 1);
            cal.set(Calendar.DAY_OF_MONTH, 1);  //防止getInstance()返回今天是2月29号,被认为是3月了
            int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);  //每个月的最大天数
            cal.set(Calendar.DAY_OF_MONTH, lastDay);
            while(cal.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY){
                cal.set(Calendar.DAY_OF_MONTH, --lastDay);
            }
            Date lastMonday = cal.getTime();
            String dtStr = new SimpleDateFormat("yyyy-MM-dd").format(lastMonday);
            System.out.println(dtStr);
        }
    
        /**
         * 返回指定年月的第一天(1号)是星期几
         * @param year
         * @param month
         */
        static int DayofFirstDay(int year, int month){
            int[] weekDays = {7, 1, 2, 3, 4, 5, 6};
            Calendar cal = Calendar.getInstance();
            cal.set(Calendar.YEAR, year);
            cal.set(Calendar.MONTH, month - 1); //从0开始
            cal.set(Calendar.DAY_OF_MONTH, 1);  
            int day = cal.get(Calendar.DAY_OF_WEEK) - 1 ;
            if(day < 0) day = 0;
    
            System.out.println("星期"+weekDays[day]);
            return weekDays[day];
        }
    }
    
    
    public class Main {
        public static void main(String[] args) {
            DayUtils.lastMonday(2016,2);
            DayUtils.lastMonday(2017,2);
            DayUtils.firstMonday(2016,9);
            DayUtils.firstMonday(2017,9);
        }
    }
    展开全文
  • 我们先用1月份的第一个星期一作为起点,然后以七天为一个间隔,查看一个星期一的日期,如果是新的一个月星期一,则输出,如果在已经输出的这个月,则继续加上7天向寻找,知道找完这一年为止。 基本思路就是...

    获取当年年份

    #include<time.h>

    main()
    {
    time_t timep;
    struct tm *p;
    time (&timep);
    p=gmtime(&timep);
    printf("%d\n",p->tm_sec); /*获取当前秒*/
    printf("%d\n",p->tm_min); /*获取当前分*/
    printf("%d\n",8+p->tm_hour);/*获取当前时,这里获取西方的时间,刚好相差八个小时*/
    printf("%d\n",p->tm_mday);/*获取当前月份日数,范围是1-31*/
    printf("%d\n",1+p->tm_mon);/*获取当前月份,范围是0-11,所以要加1*/
    printf("%d\n",1900+p->tm_year);/*获取当前年份,从1900开始,所以要加1900*/
    printf("%d\n",p->tm_yday); /*从今年1月1日算起至今的天数,范围为0-365*/

    }

    https://zhidao.baidu.com/question/558299804.html


    月份判断星期几 

    #include "stdio.h"
    #include <stdlib.h>  // 缺少头文件 
     
    main()
    {
        int y,m,d,a,b;
        b=0;
        scanf("%d%d%d",&y,&m,&d); 
        if(m>12||m<0) 
        {
            b=1;                          // b=1 后面少了逗号 
            printf("month is error.\n");  // 最后面少了逗号
        }                                 // 这里结尾的分号去掉
        else 
        {
            if(d<0) 
            {
                b=1; 
                printf("day is error.\n");// 最后面少了逗号
            }                             // 这里结尾的分号去掉
        else
        switch(m)
        {
        case 1: if(d>32) {b=1; printf("day is error.\n");}; break; 
                            // 问题同上,少逗号 
        case 2: if((y%4==0&&y%100!=0)||(y%400==0)) a=1;            
                            // 这里把 a==1 改成 a=1 
        else a==2;                                                 
                            // 这里把 a==2 改成 a=2
        if(a==1&&d>30) {b=1; printf("day is error.\n");}; break;   
                            // 问题同上,少逗号
        if(a==2&&d>29) {b=1; printf("day is error.\n");}; break;   
                            // 问题同上,少逗号
        case 3: if(d>32) {b=1; printf("day is error.\n");}; break; 
                            // 问题同上,少逗号
        case 4: if(d>31) {b=1; printf("day is error.\n");}; break; 
                            // 问题同上,少逗号
        case 5: if(d>32) {b=1; printf("day is error.\n");}; break; 
                            // 问题同上,少逗号
        case 6: if(d>31) {b=1; printf("day is error.\n");}; break; 
                            // 问题同上,少逗号
        case 7: if(d>32) {b=1; printf("day is error.\n");}; break; 
                            // 问题同上,少逗号
        case 8: if(d>32) {b=1; printf("day is error.\n");}; break; 
                            // 问题同上,少逗号
        case 9: if(d>31) {b=1; printf("day is error.\n");}; break; 
                            // 问题同上,少逗号
        case 10: if(d>32) {b=1; printf("day is error.\n");}; break;
                            // 问题同上,少逗号
        case 11: if(d>31) {b=1; printf("day is error.\n");}; break;
                            // 问题同上,少逗号
        case 12: if(d>32) {b=1; printf("day is error.\n");}; break;
                            // 问题同上,少逗号
        }
        }
        if(m==1||m==2) {
            m+=12;
            y--;} 
         
        if(b==0) {int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; 
           // 这里把 b=0 改成 b==0 
        switch(iWeek)
        {
        case 0: printf("1\n"); break;
        case 1: printf("2\n"); break;
        case 2: printf("3\n"); break;
        case 3: printf("4\n"); break;
        case 4: printf("5\n"); break;
        case 5: printf("6\n"); break;
        case 6: printf("0\n"); break;
        } 
        }
        system("pause"); 
    }

    https://zhidao.baidu.com/question/1238216961329183379.html

    作者:陈默
    链接:https://www.zhihu.com/question/51789552/answer/127750014
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    蔡勒公式:
    &amp;lt;img src=&quot;https://pic2.zhimg.com/v2-31a2c831436a892f14b15fcb38e3b5c9_b.jpg&quot; data-rawwidth=&quot;1042&quot; data-rawheight=&quot;114&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;1042&quot; data-original=&quot;https://pic2.zhimg.com/v2-31a2c831436a892f14b15fcb38e3b5c9_r.jpg&quot;&amp;gt;

    公式中的符号含义如下:

    • w:星期(0-星期日;1-星期一;2-星期二;3-星期三;4-星期四;5-星期五;6-星期六)
    • c:年份前两位数
    • y:年份后两位数
    • m:月(m的取值范围为3至14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算)
    • d:日
    • [ ]:称作高斯符号,代表向下取整,即,取不大于原数的最大整数。
    • mod:同余(这里代表括号里的答案除以7后的余数)
    &amp;lt;img src=&quot;https://pic1.zhimg.com/v2-ed68522e8b1e9bbd358dad973c78625c_b.png&quot; data-rawwidth=&quot;1089&quot; data-rawheight=&quot;338&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;1089&quot; data-original=&quot;https://pic1.zhimg.com/v2-ed68522e8b1e9bbd358dad973c78625c_r.png&quot;&amp;gt; https://zh.wikipedia.org/zh-hans/蔡勒公式
    有一个公式可以计算:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 
    w:星期;c:世纪-1;y:年(两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。(C是世纪数减一,y是年份后两位,M是月份,d是日数。1月和2月要按上一年的13月和 14月来算,这时C和y均按上一年取值。)
    算出来的W除以7,余数是几就是星期几。如果余数是0,则为星期日。
    
    https://zhidao.baidu.com/question/243564537.html
    

    简单,用蔡勒公式即可:

    #include <stdio.h>

    int main ()

    {

      int y, m, d, c, w;

      printf ("输入年 月 日(空格间隔):");

      scanf ("%d %d %d", &y, &m, &d);

      if (m ==1 || m == 2) { //判断月份是否为1或2

        y--;

        m += 12;

      }

      c = y / 100;

      y = y - c * 100;

      w = (c / 4) - 2 * c + (y + y / 4) + (13 * (m + 1) / 5) + d - 1;

      while (w < 0) w += 7;

      w %= 7;

      if (w == 0) printf ("星期日");

      else printf ("星期%d", w);

      return 0;

    }

    https://zhidao.baidu.com/question/1510495711879567580.html

    如何写个程序计算出每个月的第一个星期一对应的日期

    在前面,我们分别利用泰勒公式和C标准库中的mktime()函数推算了某个特定日期所对应的星期几,刚做完这些,就又遇到了一个与日期相关的新任务:

    老板把每个月例会的时间定在了每个月的第一个星期一,他让我把具体日期整理出来,发给每一个成员,提醒大家准时参加。

    简单地讲,也就是把每个月的第一个星期一对应的日期提取出来。如果时间范围比较短(比如一年),自己翻翻日历勉强也能解决,如果要是时间范围比较长(比如十年),再去一个个翻日历,就麻烦了。怎么办?

    还记得我们在学了C语言,如何统计一篇英文文章中的单词数?中所认识和体会到的:

    程序,就是用来帮助人们完成这些看起来枯燥繁琐但是带有一定规律性的事情的。

    面对这个麻烦而又有一定规律的问题,我们同样可以用C语言写个程序来解决。

    如何解决呢?想想我们是如何在日历中找出每个月的第一个星期一的?我们先用1月份的第一个星期一作为起点,然后以七天为一个间隔,查看下一个星期一的日期,如果是新的一个月的星期一,则输出,如果在已经输出的这个月,则继续加上7天向下寻找,知道找完这一年为止。

    基本思路就是这样,但是,我们这里还用到了mktime()函数的一个特点,也就是如果输入的分解时间的日期tm_mday超出了其取值范围[0,30],mktime()会将其折算成相邻月份的日期,比如,某个月的tm_mday 为32,而这个月只有30天,mktime()会将其视作下个月的第二天,而不会将其视作日期错误。利用这个特性,我们就可以通过递增tm_mday完成整个一年的遍历访问量了。

    按照上面分析的思路,我们可以将其实现如下:

    #include <string.h> #include <time.h> #include <stdio.h> //#include <stdbool.h> #define YEAR 2017 int main() {     struct tm t;     memset(&t,0,sizeof(t));     //用年月日填充分解时间t     //这里指定1月中的第一个星期为起点     t.tm_year = YEAR - 1900; // 年份,减去起始年份     t.tm_mon = 1 - 1; // 月份     t.tm_mday = 1;  // 2013年1月7日是1月份的第一个星期一  修改处     (这儿我们写成第一个星期日)     puts("the first mondays in 2017 are");     // 记录已经输出的月份     int lastmon = -1;     while(1)     {         //将分解时间t转换为日历时间ct         time_t ct = mktime(&t);         if(-1 == ct) //日期错误         {             break;         }         else         {             //用localtime()函数获取日历时间ct对应的分解时间             struct tm* bt = localtime(&ct);             //判断是否在2013年内             if(bt->tm_year != YEAR-1900)             {                 break;             }             //判断这个星期一是否是本月的第一个星期一             if(t.tm_mon != lastmon)             {                 //如果是,输出对应的日期                 printf("%d - %d\n",bt->tm_mon+1,bt->tm_mday);                 //记录本月已经输出                 lastmon = bt->tm_mon;             }             t = *bt;  //更新日期             t.tm_mday += 7; //检查下一个星期一         }     }     return 0; }
    http://www.cnblogs.com/kingshow123/archive/2013/11/01/firstmonday.html
    
    2017年每个月份第一个星期日对应的日期:
    #include <string.h>
    #include <time.h>
    #include <stdio.h>
    int getxq();


    //#include <stdbool.h>
    //#define YEAR 2016   //宏规定时间
    int YEAR ;
    int main()
    {    




    //变量获取时间


    time_t timep;
    struct tm *p;
    time (&timep);
    p=gmtime(&timep);
    YEAR=1900+p->tm_year;












        struct tm t;
        memset(&t,0,sizeof(t));
        //用年月日填充分解时间t
        //这里指定1月中的第一个星期为起点
        t.tm_year = YEAR - 1900; // 年份,减去起始年份
        t.tm_mon = 1 - 1; // 月份


        t.tm_mday = 1+7-getxq();  // 2013年1月7日是1月份的第一个星期一  修改处     (这儿我们写成第一个星期日)
        puts("the first mondays in 2017 are");
        // 记录已经输出的月份
        int lastmon = -1;
        while(1)
        {
            //将分解时间t转换为日历时间ct
            time_t ct = mktime(&t);
            if(-1 == ct) //日期错误
            {
                break;
            }
            else
            {
                //用localtime()函数获取日历时间ct对应的分解时间
                struct tm* bt = localtime(&ct);
                //判断是否在2013年内
                if(bt->tm_year != YEAR-1900)
                {
                    break;
                }
                //判断这个星期一是否是本月的第一个星期一
                if(t.tm_mon != lastmon)
                {
                    //如果是,输出对应的日期
                    printf("%d - %d\n",bt->tm_mon+1,bt->tm_mday);
                    //记录本月已经输出
                    lastmon = bt->tm_mon;
                }
                t = *bt;  //更新日期
                t.tm_mday += 7; //检查下一个星期一
            }
        }


        return 0;
    }


    int getxq()
    {/*int YEAR ;
    time_t timep;
    struct tm *p;
    time (&timep);
    p=gmtime(&timep);
    YEAR=1900+p->tm_year;*/




        int y,m,d,a,b;
        b=0;
      y=YEAR;
      m=1;
      d=1; //当年1月1号的星期几


        if(m>12||m<0) 
        {
            b=1;                          // b=1 后面少了逗号 
            printf("month is error.\n");  // 最后面少了逗号
        }                                 // 这里结尾的分号去掉
        else 
        {
            if(d<0) 
            {
                b=1; 
                printf("day is error.\n");// 最后面少了逗号
            }                             // 这里结尾的分号去掉
        else
        switch(m)
        {
        case 1: if(d>32) {b=1; printf("day is error.\n");}; break; 
                            // 问题同上,少逗号 
        case 2: if((y%4==0&&y%100!=0)||(y%400==0)) a=1;            
                            // 这里把 a==1 改成 a=1 
        else a==2;                                                 
                            // 这里把 a==2 改成 a=2
        if(a==1&&d>30) {b=1; printf("day is error.\n");}; break;   
                            // 问题同上,少逗号
        if(a==2&&d>29) {b=1; printf("day is error.\n");}; break;   
                            // 问题同上,少逗号
        case 3: if(d>32) {b=1; printf("day is error.\n");}; break; 
                            // 问题同上,少逗号
        case 4: if(d>31) {b=1; printf("day is error.\n");}; break; 
                            // 问题同上,少逗号
        case 5: if(d>32) {b=1; printf("day is error.\n");}; break; 
                            // 问题同上,少逗号
        case 6: if(d>31) {b=1; printf("day is error.\n");}; break; 
                            // 问题同上,少逗号
        case 7: if(d>32) {b=1; printf("day is error.\n");}; break; 
                            // 问题同上,少逗号
        case 8: if(d>32) {b=1; printf("day is error.\n");}; break; 
                            // 问题同上,少逗号
        case 9: if(d>31) {b=1; printf("day is error.\n");}; break; 
                            // 问题同上,少逗号
        case 10: if(d>32) {b=1; printf("day is error.\n");}; break;
                            // 问题同上,少逗号
        case 11: if(d>31) {b=1; printf("day is error.\n");}; break;
                            // 问题同上,少逗号
        case 12: if(d>32) {b=1; printf("day is error.\n");}; break;
                            // 问题同上,少逗号
        }
        }
        if(m==1||m==2) {
            m+=12;
            y--;} 
         
        if(b==0) {int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; 
           // 这里把 b=0 改成 b==0 
        switch(iWeek)
        {
        case 0: return 1; break;
        case 1: return 2; break;
        case 2: return 3; break;
        case 3: return 4; break;
        case 4: return 5; break;
        case 5: return 6; break;
        case 6: return 7; break;
        } 
        }
      
    }






    展开全文
  • 仔细观察的话,我们会发现除去1月和2月,3月到7月这五个月的剩余天数值是3,2,3,2,3;8月到12月这五个月的天数值也是3,2,3,2,3,正好是一个重复。相应的累积天数中, 后一月的累积天数和前一月的累积天数之差减去28...
  • 1、从键盘输入一个月份,屏幕上输出本年这个月的月历,每星期一行,从星期日开始,到星期六结束; 2、从键盘输入一个日期,屏幕上回答是星期几; 3、从键盘输入两个日期,计算这两个日期之间含有多少天。 import ...
  • 在Linux中可以通过date命令获取昨天、明天、上个月、下个月、上一年和下一年 获取昨天 date -d 'yesterday' # 或 date -d 'last day' 获取明天 date -d 'tomorrow' # 或 date -d 'next day' 获取上...
  • 1. 编写一个函数,输入年份,...3. 输入日期(年、月、日),输出他是该年的第几天、星期几。 4. 调用【实验一】中1、2的两个函数,打印年历,要求输入年份(1900以后),输出每个月的月历构成年历。即每天对应的星期。
  • 五年级3月30日——4月3日课程表

    千次阅读 2020-03-25 23:30:03
    五年级课程表 【请各位家长注意翻看课程表下方学习指导】 时间 周一 周二 周三 周四 周五 9:00-9:25 英语 数学 数学 语文 英语 9:30-9:40 ...3:00-3:25 语文 语文 体育 美术 数学 ...
  • 天才冯·诺依曼与冯·诺依曼瓶颈

    千次阅读 2020-12-23 12:46:46
    天才 冯·诺依曼冯·诺依曼1903年1228日出生于奥匈帝国布达佩斯,1957年28日卒于美国,终年53岁。在他短暂的一生中,他取得了巨大的成就,远不止于世人熟知的“冯·诺依曼架构”。约翰·冯·诺伊曼,出生于...
  • 根据年月日推算是星期几的公式

    千次阅读 2015-03-28 23:55:34
    有时候,想知道公元某年某某日是星期几,可以用下面的公式算出来:     这里的方括号表示只取商的整数部分。式中: x:这一年是公元多少年。 y:这一天是这一年的第几天。 s:星期几。不过要先除以7...
  • 如何在电脑桌面设置显示星期

    千次阅读 2021-06-18 05:57:40
    如何在电脑桌面设置显示星期我们使用的电脑,一般在右角只显示日期和时间,通常没有星期的显示,想要显示星期,该怎么操作呢?今天就跟大家介绍一下如何在电脑桌面设置显示星期的具体操作步骤。1. 首先打开电脑,...
  • 增加N个月到阶段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。 mysql> select PERIOD_ADD(9801,2); -> 199803 PERIOD_DIFF(P1,P2) 返回在时期P1和P2之间月数,P1和P2应该以格式...
  • 最近笔者在开发一报表功能时,客户要求报表生成的时间可以自己制定,也就是说我们系统需要提供一或两日期的文件框(如果是日报表就一,如果是周或或年报表就需要两)给客户自己填写。除此之外,客户还...
  • 仔细观察的话,我们会发现除去1月和2月,3月到7月这五个月的剩余天数值是3,2,3,2,3;8月到12月这五个月的天数值也是3,2,3,2,3,正好是一个重复。相应的累积天数中,后一月的累积天数和前一月的累积天数之差减去28...
  • 计算星期几的公式

    千次阅读 2012-02-22 15:30:24
    如何计算某一天是星期几? —— 蔡勒(Zeller)公式  历史上的某一天是星期几?未来的某一天是星期几?关于这问题,有很多计算公式(两通用计算公式和一些分段计算公式),...m:(m大于等于3,小于等于14,
  • 今天做项目遇到了,获取相对于当前日期前30天的时间,结合网上资料,做了一份整理。 一.获取指定日期前或者后指定间隔时间代码 ...[0-9])-([0-3]?[0-9])$/; //判断输入的日期是否符合格式正则表达式  i...
  •  //本月,很多人都会说本月的第一天嘛肯定是1,最后一天就是下个月一号再减一天。当然这是对的 //一般的写法  DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() +"1"; //第一天  DateTime.Parse...
  • 巧算星期几 基姆。拉尔森 基姆拥有计算机学科的博士学位。他对数据库,算法和数据结构有着浓厚的兴趣。他的联系地址是 (原文 为丹麦文--译者注) 31,DK-5270,Odense N,Denmark,或发 E-mail 至 :...
  • //基姆拉尔森计算公式根据日期判断星期几 void CalculateWeekDay(int y, int m,int d){ if(m==1||m==2) m+=12,y--; int iWeek = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; switch(iWeek){ case 0: printf("星期...
  • 论文的名字叫《Day of the week effect in paper submission/acceptance/rejection to/in/by peer review journals(星期几对同行评审期刊论文投稿/接收/拒绝的影响)》,作者来自英国莱斯特大学和塞尔威亚贝尔...
  • Oracle 获取当前年、、日

    千次阅读 2020-12-29 06:49:24
    Oracle 获取当前年、、日 1、//oracle中extract()函数从oracle 9i中引入,用于从一date或者interval类型中截取到特定的部分 //语法如下 EXTRACT ( { YEAR | MONTH | DAY | HOUR | MINUTE | SECOND } | { TIME...
  • 如何计算某一天是星期几

    千次阅读 2014-09-22 15:45:12
    星期制度是一种有古老传统的制度。据说因为《圣经·创世纪》中规定上帝用了六  天时间创世纪,第七天休息,所以人们也就以七天为一...指官员的工作每十日为一周期,第十日休假),但后来也采取了西方的星期制度。
  • 那个时候,心里挺乱的,当时了解到前端都可以代替安卓之后,有根据自己的性格,不想走安卓底层这条路,当时就处于一迷茫期,有那么天浑浑噩噩,打不起精神,这里学一点,哪里学一点,像是一无头的苍蝇嗡嗡的转...
  • C语言根据日期计算星期——基姆拉尔森计算公式

    千次阅读 多人点赞 2020-07-03 16:29:04
    根据已知公元1年11日星期一来推算。 其中,要把一和二看成是上一年的十三和十四,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。 代码 #include <stdio.h> void main() { char ...
  • C语言根据日期判断星期几(使用基姆拉尔森计算公式)算法如下: 基姆拉尔森计算公式W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7在公式中d表示日期中的日数,m表示月份数,y表示年数。注意:在公式中有与其他...
  • sql server 获取上个月,上周

    万次阅读 2017-01-11 10:24:18
    上周第一天:SELECTDATEADD(wk, DATEDIFF(wk,0,getdate()-7), 0) 上周最后一天:SELECTDATEADD(wk, DATEDIFF(wk,0,getdate()), 0)   上个月第一天:SELECTDATEADD(mm, ...上个月最后一天:selectdateadd(mm,date
  • 备注:NEXT_DAY(SYSDATE,1)函数为当前系统时间的下个星期日时间,数字1代表星期日; --------------------------------------------------华丽的分割线------------------------------------------------------...
  • 通过Shell判断某个日期是星期几

    千次阅读 2014-03-07 10:39:53
    2. 然后每周六归档备份完毕后,把上周日到本周六的备份文件统一cp到一目录(/datafile/tarfile),然后把这目录gtar压缩打包,以当天日期命名比如:prod_yyyymmdd.tar.gz  3. 把prod_yyyymmdd.tar.gz传到...
  • 双非本科菜菜共勉之八个月的学习之路

    千次阅读 多人点赞 2021-12-09 15:18:27
    大家好啊,你们的黑虎帮帮主消失了差不多两个月的时间,今天我又来了,有很多粉丝私信问我怎么那么久都不更新博客呢,那么我现在真真确确的告诉你们,我在找工作啦,那就是秋招,哈哈!现在我更博那表明我已经找到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 72,498
精华内容 28,999
关键字:

下个月3号星期几