当前位置: 首页 > 面试题库 >

Java“周年”如何真正发挥作用?

江华容
2023-03-14
问题内容

这是一个简单的错误开始的:我使用的YYYY不是对象的yyyy格式字符串SimpleDateFormat。但是我对使用格式错误的字符串的测试结果完全感到困惑。

这段代码:

@Test
public void whatTheHell() {
        try {
                SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/YYYY");

                Date d1 = sdf.parse("01/07/2016");
                Date d2 = sdf.parse("02/08/2016");
                Date d3 = sdf.parse("11/29/2027");

                System.out.println(d1.toString());
                System.out.println(d2.toString());
                System.out.println(d3.toString());
        } catch (ParseException pe) {
                fail("ParseException: " + pe.getMessage());
        }
}

产生以下输出:

Sun Dec 27 00:00:00 PST 2015
Sun Dec 27 00:00:00 PST 2015
Sun Dec 27 00:00:00 PST 2026

我在这里阅读了有关’Y’参数的文档:https
:
//docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html,但是我仍然看不到在这里工作。特别是最后一种情况:我可以有点理解如何将1月(也许2月)的日期转换为上一年的12月,但是将11月29日的日期向后移动11个月会令我感到困惑。那么12月27日有什么特别之处?

谁能解释?

更多信息

@Jan建议依赖toString()方法可能是个问题,因此我定义了一种日期格式,以YYYY MM dd '-' yyyy MM dd与上述相同的代码进行打印。这是其他输出:

2016 12 27 - 2015 12 27
2016 12 27 - 2015 12 27
2027 12 27 - 2026 12 27

问题答案:

很简单:2015年12月27日是2016年第1周的第1天(而2026年12月27日是2027年第1周的第1天)。可以通过添加以下行来验证:

SimpleDateFormat odf = new SimpleDateFormat("YYYY-ww-u");
System.out.println(odf.format(d1));
System.out.println(odf.format(d2));
System.out.println(odf.format(d3));

如果SimpleDateFormat输出日期,则它可以使用所有字段:年,月,日,周几,月中的某周,年中的某周,周年等。

解析时,SimpleDateFormat需要一组匹配的值:日,月,年
星期几,年中的某年,某年的某年。由于您提供的是星期几,但没有提供星期几和每年的某天,因此这些值的值假定为1。

实际值取决于您的区域设置:

  • 一年中的哪一周是第1周
  • 哪一天是一周的第一天

(请参阅https://docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html#week_and_year)

在我的系统上(使用de-ch语言环境,格式为“ EEE MMM dd HH:mm:ss zzz yyyy-YYYY-ww-u”)

Mo Jan 04 00:00:00 MEZ 2016-2016-01-1
Mo Jan 04 00:00:00 MEZ 2016-2016-01-1
Mo Jan 04 00:00:00 MEZ 2027-2027-01-1


 类似资料:
  • 这是一个简单的错误:我在对象的格式字符串中使用了而不是。但我完全困惑于我的测试结果与错误的格式字符串。 以下代码: @Jan建议依赖toString()方法可能会有问题,所以我定义了一个日期格式,以与上面相同的代码打印。下面是附加输出:

  • 问题内容: 我玩了一段时间,发现了一些有趣的东西: 现在,错误显而易见了,将列表转换为元组就可以像开始时一样正常工作: 现在,我的问题是:为什么第 一个参数必须是str或str前缀的元组,而不是 str前缀 的列表 ? AFAIK,其Python代码可能如下所示: 但这让我更加困惑,因为即使记住了它,列表还是元组也应该没有任何区别。我想念什么? 问题答案: 从技术上讲,没有理由不接受其他序列类型。

  • > 铬: 硒 下面是我的日志文件:什么是开发工具问题?

  • 问题内容: 我知道,但是他们不能真正关闭JDialog。当我使另一个线程停止时,JDialog的线程仍然运行。 而且我不能使用,因为其他线程需要运行一段时间。 遵循代码,我终于在程序末尾通过System.exit(0)解决了问题。 问题答案: 发送一个使用事件, 附录:应谨慎使用,在下面的示例中,第二个非守护线程正常完成,即使对话框在退出循环之前已关闭。有关详细信息,请参见JLS§12.8程序退出

  • 好的,所以我做了一些关于常量以及它们应该如何设计和使用的研究。对于我的应用程序来说,有许多枚举可以将彼此相关的术语分组是有意义的。 其想法是,当我开发具有数百个参数(其中许多参数被多次使用)和方法的web服务时,我可以使用枚举的值进行注释。在此之前,有一个巨大、令人厌恶的常量文件,其中包含冗余和未维护的值。 所以,这里有一个枚举我想使用: 这里有一个地方我想用它: 因此,如果我尝试上面的方法,就会

  • 我有一个eclipse rcp应用程序,它有时可能同时运行多个作业。也有一些情况下,其中一些作业可能需要暂停一段指定的时间。我在调用线程时注意到了这一点。sleep()可以做到这一点,但它似乎对其他工作也有一些不利影响。当我尝试与UI交互时,我甚至会在应用程序的标题上看到(没有响应)。我错误地认为每个作业实例都有自己的线程,但最近发现情况并非如此。在我脑海中,我唯一能想到的就是在每次创建作业时显式