gpt4 book ai didi

java - 一个非常简单的 java 代码(获取星期几的日期),但我得到的结果非常奇怪,为什么?

转载 作者:搜寻专家 更新时间:2023-11-01 01:47:52 24 4
gpt4 key购买 nike

我有以下 java 代码来获取特定工作日的日期:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.set(Calendar.YEAR, 2010);
cal.set(Calendar.WEEK_OF_YEAR, 37); //week 37 of year 2010
cal.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
System.out.println("date="+sdf.format(cal.getTime()));

当我将此代码放入 main(String[] args) 方法时,如下所示:

import java.util.*;
import java.lang.*;
import java.text.SimpleDateFormat;

public class test{
public static void main(String[] args){

/** get dates from a known week ID **/
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.set(Calendar.YEAR, 2010);
cal.set(Calendar.WEEK_OF_YEAR, 37);
cal.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
System.out.println("date="+sdf.format(cal.getTime()));
}
}

然后运行它,我得到了正确的结果,即 date=09/09/2010。没有问题。

然而...

当我将这段代码放在一个类的函数中时,如下所示:

Public Class MyService{

MyService(){}
...
...
public String getDateOfWeekDay(int weekId, int year, int weekDay){
//weekId = 37; year=2010; weekDay = Calendar.THURSDAY

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.set(Calendar.YEAR, year);
cal.set(Calendar.WEEK_OF_YEAR, weekId);
cal.set(Calendar.DAY_OF_WEEK, weekDay);

//I am developing android app. so I use Log to printout
logPrinter.println("date="+sdf.format(cal.getTime()));

return sdf.format(cal.getTime());
}

}

在另一个类 MainClass 中,MainClass 将调用此服务函数,如下所示:

Public Class MainClass{

MyService myService = new MyService();
myService.getDateOfWeekDay(37,2010,Calendar.THURSDAY);

}

但返回的结果始终是当前周的星期四 (date=14/10/2010) 的日期,而不是我指定的星期四(2010 年第 37 周,星期四).为什么????我使用完全相同的 java 代码来获取特定星期几的日期,只是以不同的方式使用它,为什么结果不同????我不明白这个......任何人都可以向我解释?

最佳答案

是的,JodaTime 很棒,但我敢打赌您更愿意知道您的东西出了什么问题。

添加另一个 JAR 依赖项对于移动设备来说可能是个问题。

那个方法不好,IMO。这个名字用词不当,它做的事情太多了。您正在创建一个字符串,而不是一个日期,并且您正在打印到日志中。我建议返回一个 Date,让客户担心他们是否要将它变成一个 String。日志记录是一个横切关注点。

这是一个有效的类(和一个 JUnit 测试)。看看有什么不同:

package util;

import java.util.Calendar;
import java.util.Date;

public class DateUtils
{
public static Date getDateOfWeekDay(int weekId, int year, int weekDay)
{
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.WEEK_OF_YEAR, weekId);
cal.set(Calendar.DAY_OF_WEEK, weekDay);
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);

return cal.getTime();
}

}

JUnit 测试:

package util;

import org.junit.Assert;
import org.junit.Test;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
* DateUtilsTest
* User: Michael
* Date: 10/16/10
* Time: 10:40 AM
*/
public class DateUtilsTest
{
public static final DateFormat DEFAULT_FORMAT = new SimpleDateFormat("dd/MM/yyyy");

@Test
public void testNewYearsDayLastYear() throws ParseException
{
Date expected = DEFAULT_FORMAT.parse("1/1/2009");
Date actual = DateUtils.getDateOfWeekDay(1, 2009, Calendar.THURSDAY);

Assert.assertEquals(expected, actual);
}

@Test
public void testTaxDay() throws ParseException
{
Date expected = DEFAULT_FORMAT.parse("15/4/2010");
Date actual = DateUtils.getDateOfWeekDay(16, 2010, Calendar.THURSDAY);

Assert.assertEquals(expected, actual);
}

@Test
public void testGetDateOfWeekDay() throws ParseException
{
Date expected = DEFAULT_FORMAT.parse("16/10/2010");
Calendar calendar = Calendar.getInstance();
calendar.setTime(expected);
int week = calendar.get(Calendar.WEEK_OF_YEAR);
int year = calendar.get(Calendar.YEAR);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);

Date actual = DateUtils.getDateOfWeekDay(week, year, dayOfWeek);

Assert.assertEquals(expected, actual);
}
}

关于java - 一个非常简单的 java 代码(获取星期几的日期),但我得到的结果非常奇怪,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3949242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com