首页 > 试题广场 >

一年中的第几天

[编程题]一年中的第几天
  • 热度指数:689 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入一个"YYYY-MM-dd"格式的日期字符串,输出该天是当年的第几天(1 月 1 日是每年的第 1 天

输入描述:
一个"YYYY-MM-dd"格式的表示日期的字符串


输出描述:
该天是当年的第几天
示例1

输入

2019-01-09

输出

9
示例2

输入

2004-03-01

输出

61

说明

2004年为闰年,所以是第31+29+1=61天
var line = readline();
var time = line.split("-");
var year = parseInt(time[0]),
    month = parseInt(time[1]),
    day = parseInt(time[2]);
const arr = [0,31,28,31,30,31,30,31,31,30,31,30]
var mid = 0, result = 0;
for(let i=0; i<month; i++) {
  if(year%4==0 && year%100!=0 || year%400==0){
    arr[2] = 29;
    mid += arr[i];
  }
  else {
    mid += arr[i];
  }
}
result = mid + day;
print(result);

发表于 2020-08-19 14:27:02 回复(0)
JavaScript(Node) 😎题目:bilibili📺-日期字符串
leetcode 1360 daysbetweenDate
绝对值(时间戳相减) / 每天的毫秒数
// leetcode 1360 daysbetweenDate
// 绝对值(时间戳相减) / 每天的毫秒数
const readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    ouput: process.stdout
})
let inArr = []
rl.on('line',line=>{
    if(!line) return
    inArr.push(line.trim())
    if(inArr.length === 1){
        let str = inArr[0]
        let year = inArr[0].split('-').map(e=>+e)[0]
        let baseYear = year+'-01-01'
        let res = daysBetweenDates(str,baseYear)
        console.log(res+1)

    }
})
var daysBetweenDates = function(date1, date2) {
    return Math.abs( (+new Date(date1)) - (+new Date(date2)) ) / (24 * 60 * 60 * 1000);
  };

发表于 2020-02-27 14:57:14 回复(0)
#include <iostream>
#include <string>

using namespace std;

static int month_days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool is_true(int& year){
    if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
        return true;
    return false;
}

int handle(string& str){
    int year = 0, month = 0, day = 0;
    int flag = 1;
    for (int i = 0; i < str.size(); ++i){
        if (str[i] == '-'){
            ++flag;
            continue;
        }
        if (flag == 1)
            year = year * 10 + (str[i] - '0');
        else if (flag == 2)
            month = month * 10 + (str[i] - '0');
        else if (flag == 3)
            day = day * 10 + (str[i] - '0');
    }
    
    int result = 0;
    for (int j = 1; j < month; ++j){
        result += month_days[j];
        if (j == 2 && is_true(year)) ++result;
    }
    result += day;
    return result;
}

int main(){
    string str;
    cin >> str;
    cout << handle(str) << endl;
    
    return 0;
}


发表于 2022-01-26 18:00:39 回复(0)
Golang
package main
 
import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
    //"math"
)
 
func main() {
 
    scanner := bufio.NewScanner(os.Stdin)
    scanner.Scan()
 
    text1 := scanner.Text()
     
    text1 = strings.Replace(text1, "\"", "", 2)   //////////    \"
     
    num1 := strings.Split(text1, "-")
     
    year, _ := strconv.Atoi(num1[0])
    month, _ := strconv.Atoi(num1[1])
    day, _ := strconv.Atoi(num1[2])
 
    var rtVal int = ( month - 1) * 30 + day
     
    if month > 2 {
         
        if ((year % 100 != 0 && year % 4 == 0 ) || year % 400 == 0) && month > 2{
            rtVal -= 1
        } else {
            rtVal -= 2
        }
    }
 
     
    switch month {
         
        case 2, 3: rtVal += 1
        case 4, 5: rtVal += 2
        case 6, 7: rtVal += 3
        case 8: rtVal += 4
        case 9, 10 : rtVal += 5
        case 11, 12: rtVal += 6
    }
     
    fmt.Println( rtVal )
}


发表于 2022-01-18 10:39:43 回复(0)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String date;
        while((date = br.readLine()) != null){
            int year = Integer.parseInt(date.substring(0, 4));
            int month = Integer.parseInt(date.substring(5, 7));
            int day = Integer.parseInt(date.substring(8, date.length()));
            int result = 0;
            if((year % 4 == 0 && year % 100 != 0) || (year % 100 == 0 && year % 400 == 0)){
                // 闰年的情况
                for(int m = 1; m < month; m++){
                    if(m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10)
                        result += 31;
                    else if(m == 4 || m == 6 || m == 9 || m == 11)
                        result += 30;
                    else
                        result += 29;
                }
            }else{
                // 平年的情况
                for(int m = 1; m < month; m++){
                    if(m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10)
                        result += 31;
                    else if(m == 4 || m == 6 || m == 9 || m == 11)
                        result += 30;
                    else
                        result += 28;
                }
            }
            result += day;
            System.out.println(result);
        }
    }
}

发表于 2020-10-15 15:57:16 回复(0)
import java.util.*;
import java.text.ParseException;
import java.util.Date;
import java.text.SimpleDateFormat;
public class Main{
    public static void main(String[] args) throws ParseException{
        Scanner sc=new Scanner(System.in);
        String a=sc.nextLine();
        SimpleDateFormat sim=new SimpleDateFormat("yyyy-MM-dd");
        Date date=sim.parse(a);
        Calendar calendar=Calendar.getInstance();
        calendar.setTime(date);
        int b=calendar.get(Calendar.YEAR );
        int k=calendar.get(Calendar.MONTH);
        int sum=0;
        for(int i=1;i<=k;i++){
        calendar.set(b, i, 1);
        calendar.add(Calendar.DAY_OF_MONTH, -1);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
            sum=sum+day;
            }
        String[] a1=a.split("-");
        int q=Integer.parseInt( a1[2]);
        System.out.print(sum+q);
    }
}
发表于 2020-10-11 16:15:42 回复(0)
time = list(map(int,raw_input().split("-")))
year = time[0]
mon = time[1]
day = time[2]
mon31 = [1,3,5,7,8,10,12]
mon30 = [4,6,9,11]
days = 0
if mon >2:
    for i in range(1,mon):
        if i in mon31:
            days += 31
        elif i in mon30:
            days += 30
        else:
            if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
                days += 29
            else:
                days += 28
elif mon > 1:
    days += 31
else:
    days = 0
days = days + day
print(days)
编辑于 2020-09-03 18:19:36 回复(0)
function getDays(){
		 	var riqi = readline(),
		 	    arr = riqi.split('-'),
		 	    a = Number(arr[0]),
		 	    b = Number(arr[1]),
		 	    c = Number(arr[2]),
		 	    days = 0;
		 	 if (a % 4 == 0 && a % 100 != 0 || a % 400 == 0){
		 	 	if (b > 2) {
		 	 		if ((b-1) % 2 != 0){
		 	 			days = 31*(b-1) - 0.5*(b-2) - 1 + c;
		 	 		} else {
		 	 			days = 31*(b-1) - 0.5*(b-1) - 1 + c; 
		 	 		}		 	 	
		 	 	} else {
		 	 		days = 31*(b-1) + c;
		 	 	}
		 	 } else {
		 	 	if (b > 2) {
		 	 		if ((b-1) % 2 != 0){
		 	 			days = 31*(b-1) - 0.5*(b-2) - 1 + c;
		 	 		} else {
		 	 			days = 31*(b-1) - 0.5*(b-1) - 1 + c; 
		 	 		}		 	 	
		 	 	} else {
		 	 		days = 31*(b-1) + c;
		 	 	}
		 	 }
		 	 return days;
		 }
		getDays();
JS写的,但一直说开头的readline找不到。就想知道怎么在JS中把牛客网给定的输入值调用到函数里面啊

发表于 2020-08-18 04:45:20 回复(0)
一招switch走天下!
坑在要知道闰年怎么判断,我纠结这个好久。。。QAQ
var line = readline().split('-');
var year = parseInt(line[0]);
var month = parseInt(line[1]);
var day = parseInt(line[2]);
var ans = day;
for(var i=1;i<month;i++){
    switch(i){
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            ans += 31;
            break;
        case 2:
            if((year%4==0&&year%100!=0)|| year%400==0){
                ans += 29;
            }else{
                ans += 28;
            }
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            ans += 30;
            break;
    }
}
console.log(ans);


发表于 2020-08-13 15:56:53 回复(0)


let date = readline();
const time = (date)=> {
    const time = new Date(date);
    const year = time.getFullYear();
    const timestamp = time.getTime() - new Date(year+"-01-01").getTime();
    const one = 24*3600*1000;
    console.log(Math.ceil(timestamp/one + 1))
}
time(date);
取巧了
发表于 2020-08-13 01:21:41 回复(0)
Python3
date = input()
year, month, day = [int(i) for i in date.split('-')]
day_of_month = {1: 31, 2: 28, 3: 31, 4: 30,
                5: 31, 6: 30, 7: 31, 8: 31,
                9: 30, 0: 31, 11: 30, 21: 31}
is_leap_year = True if (year%4 == 0 and year%100 != 0) or (year%400 == 0) else False
if is_leap_year:
    day_of_month[2] = 29
days = day
for i in range(1, month):
    days += day_of_month[i]
print(days)


编辑于 2020-08-07 07:07:40 回复(0)
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
 
 
 
 
 
int main()
{
    int y,m,d;
    int i;
    int m1[] = {31,29,31,30,31,30,31,31,30,31,30,31};
    int m2[] = {31,28,31,30,31,30,31,31,30,31,30,31};
    int num = 0;
    scanf("%d-%d-%d",&y,&m,&d);
    if( y%100 ? !(y%4) : !(y%400) )
    {
        for(i=0;i<m-1;i++)num += m1[i];
        num += d;
    }
    else
    {
        for(i=0;i<m-1;i++)num += m2[i];
        num += d;
    }
    printf("%d\n",num);
    return 0;
}

发表于 2020-02-02 03:30:08 回复(0)
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String dateStr = scanner.nextLine();
        LocalDate localDateNow = LocalDate.parse(dateStr);
        LocalDate localDateOne = LocalDate.parse(localDateNow.getYear() + "-01-01");
        int i = (int) ChronoUnit.DAYS.between(localDateOne, localDateNow);
        System.out.println(i + 1);
    }

}


发表于 2020-01-08 18:08:56 回复(0)
<?php $date1='2019-12-01'; $arr=str_split($date1,4); //echo $arr[0];  $strto=strtotime($date1)-strtotime($arr[0].'-01-01'); echo $strto/3600/24;
发表于 2019-12-21 14:20:57 回复(0)
57头像 57
let str=readline()
print(getDate(str))
function getDate(str) {
    let arr = str.split("-")
    let year = parseInt(arr[0]), month = parseInt(arr[1]), date = parseInt(arr[2])
 
 
    let flag = false
    if (year % 4 == 0 && year % 100 != 0 || year % 100 == 0 && year % 400 == 0) {
        flag = true
    }
 
    let total = (month - 1) * 31 + date
 
    if (month == 1) return total
 
    for (let i = 1; i < month; i++) {
 
 
        if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) {
 
            continue
 
        } else if (i == 2) {
            if (flag) {
                total = total - 2
           
            } else {
                total = total - 3
            }
        } else {
            total = total - 1
        }
    }
 
    return total
}
编辑于 2019-12-03 21:20:55 回复(0)