Java解决一年中的第几天

01 题目

  • 给你一个字符串 date ,按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天。

    示例 1:

    输入:date = "2019-01-09"输出:9解释:给定日期是2019年的第九天。

    示例 2:

    输入:date = "2019-02-10"输出:41

    提示:

    • date.length == 10
    • date[4] == date[7] == '-',其他的 date[i] 都是数字
    • date 表示的范围从 1900 年 1 月 1 日至 2019 年 12 月 31 日

02 知识点

  • 时间戳
  • 日历类,时间格式类

03 我的题解思路

import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public class dayOfYear {public static void main(String[] args) {//测试数据System.out.println(dayOfYear("2019-02-10"));} public static int dayOfYear(String date) { int rs=0;//返回值 DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");//设置时间格式 Long end=0l;//输入值的时间戳 Long start=0l;//当年第一天的时间戳//切割字符串并取年份拼接出当年第一天的字符串 String dateSt=date.split("-")[0]+"-01-01"; try {//parse方法必须捕获(try-catch)异常,该方法把符合格式的字符串转为日期类Date dateE=dateFormat.parse(date);Date dateS=dateFormat.parse(dateSt);start=dateS.getTime();//从日期类中取时间戳end=dateE.getTime();} catch (ParseException e) {e.printStackTrace();}// 时间戳相减获得二者时间差的毫秒数,将毫秒数转为天数并加一,再将long类型转回int类型return Math.toIntExact((end-start)/1000/60/60/24+1);}}