当前位置: 首页 > 知识库问答 >
问题:

爪哇的朱利安日

南门新荣
2023-03-14

我已经在网站上看到了“解决方案”http://www.rgagnon.com/javadetails/java-0506.html,但它不能正常工作。昨天(六月八日)应该是159,但它说是245。

那么,有没有人用Java解决方案来获取当前日期的三位数朱利安日(不是朱利安日——我需要今年的日期)?

谢谢!马克

共有3个答案

和弘博
2023-03-14

如果你想要的只是一年中的一天,为什么不直接使用GregorianCalendarsDAY_OF_YEAR字段呢?

import java.util.GregorianCalendar;
public class CalTest {
    public static void main(String[] argv) {
        GregorianCalendar gc = new GregorianCalendar();
        gc.set(GregorianCalendar.DAY_OF_MONTH, 8);
        gc.set(GregorianCalendar.MONTH, GregorianCalendar.JUNE);
        gc.set(GregorianCalendar.YEAR, 2010);
        System.out.println(gc.get(GregorianCalendar.DAY_OF_YEAR));
}

}

或者,您可以计算今天的儒略日期与今年1月1日的日期之差。但一定要在结果中加1,因为1月1日不是一年中的第0天:

int[] now = {2010, 6, 8};
int[] janFirst = {2010, 1, 1};
double dayOfYear = toJulian(now) - toJulian(janFirst) + 1
System.out.println(Double.valueOf(dayOfYear).intValue());
康烨伟
2023-03-14
LocalDate.now().getDayOfYear()

...或者...

org.threeten.extra.DayOfYear.now() 

朱利安日一词有时被松散地用来表示一年中的序数日,或序数日,意思是从1到365或366(闰年)的数字。1月1日是<码>1,1月2日是<码>2,12月31日是<码>365(或以闰年表示的<码>366)。

这种Julian的松散(不正确)用法可能来自于天文学和其他领域的跟踪日期,作为自公元前4713年1月1日(儒略历)正午以来的连续天数。今天朱利安的日期接近250万,<代码>2,457,576。

爪哇。Java8和更高版本中内置的时间框架提供了一个简单的工具来获取一年中的某一天。

LocalDate类表示一个只包含日期的值,不包含一天中的时间和时区。你可以在一年中的某一天进行审问。

LocalDate localDate = LocalDate.of ( 2010 , Month.JUNE , 8 );
int dayOfYear = localDate.getDayOfYear ();

转储到控制台。结果显示,2010年6月8日的确是第159天。

System.out.println ( "localDate: " + localDate + " | dayOfYear: " + dayOfYear );

localDate: 2010-06-08|day Of年份: 159

时区在确定日期时至关重要。在任何给定的时刻,日期都因地区而异。例如,法国巴黎午夜后几分钟是新的一天,而魁北克蒙特利尔仍然是“昨天”。

ZoneId z = ZoneId.of( “America/Montreal” );
LocalDate today = LocalDate.now( z );
int dayOfYear = today.getDayOfYear ();

去另一个方向,从一个数字到一个日期。

LocalDate ld = Year.of( 2017 ).atDay( 159 ) ;

ThreePre-Extra库为Java内置的java.time类添加了功能。

这个库提供了一个类来明确表示任何一年的第几天:DayOfYear。使用这个类而不仅仅是一个整数可以使代码更加自我记录,提供类型安全性,并确保有效值。

DayOfYear dayOfYear = DayOfYear.from( LocalDate.of ( 2010 , Month.JUNE , 8 ) ) ;

获取具有特定年份的DayOfYear的日期。

LocalDate localDate = dayOfYear.atYear( 2023 ) ;

爪哇。时间框架内置于Java8和更高版本中。这些类取代了麻烦的旧遗留日期时间类,如java。util。日期日历

要了解更多信息,请参阅Oracle教程。并搜索堆栈溢出以获得许多示例和解释。规格是JSR 310。

现在处于维护模式的Joda-Time项目建议迁移到java.time类。

您可以直接与数据库交换java.time对象。使用符合JDBC 4.2或更高版本的JDBC驱动程序。不需要字符串,不需要java.sql.*类。冬眠5

在哪里可以获得java。时间课?

  • JavaSE8、JavaSE9、JavaSE10、JavaSE11和更高版本—标准JavaAPI的一部分,带有捆绑实现。
    • Java9带来了一些小功能和修复
    • 大多数java.time功能被反向移植到Java6
    • Android(26)的更高版本捆绑了java的实现。时间课
    • 对于早期的Android(

    额外的ThreeTen项目扩展了java。额外上课的时间。这个项目是将来可能添加到java的一个试验场。时间您可以在这里找到一些有用的类,如IntervalYearWeekYearQuarter,等等。

古彦
2023-03-14
DateFormat d = new SimpleDateFormat("D");
System.out.println(d.format(date));
 类似资料:
  • 问题内容: 我已经在http://www.rgagnon.com/javadetails/java-0506.html上看到了“解决方案” ,但是它不能正常工作。例如,昨天(6月8日)应该是159,但它说是245。 那么,有人用Java解决方案来获取当前日期的三位数儒略日(不是儒略日-我需要今年的日子)吗? 谢谢!标记 问题答案: 如果您只需要一年中的某天,为什么不使用GregorianCalen

  • 问题内容: 我有这个Java代码段。我是Java的菜鸟。 错误: 码: 问题答案: 是的,这是问题所在: 在课程的最高级别,您只能拥有: 实例初始化程序块() 静态初始值设定块() 变量声明 构造函数声明 方法声明 嵌套类型声明 终结器声明 这些都不是。如果你 的意思 来声明一个变量,你应该这样做: 如果这 不是 您想要的,则应解释您的意图。 编辑:修复此问题后,此编译器错误似乎很明显: Conf

  • 我已经红色了多篇文章和讨论,但我仍然有一些不确定性:我不确定是否应该使用或任何其他类型来存储预订-在“在线预订”的意义上(因此来自不同国家/时区的参与者需要在时间线上的同一时刻会面)。我倾向于使用,因为DB和Backend设置为UTC,并且由于传入的“创建预订”json消息包含ISO 8601(带偏移量)start DateTime 让我们采用以下设置:1.数据库(UTC、Oracle、MSSQL

  • 我的问题是关于cucumber特性文件的并行执行。在Selenium Java中,可以通过一个runner类并行运行多个cucumber特性文件吗? 我尝试过不同的方法,但都没有成功。

  • 当我运行程序而不是找到骑士之旅时,我收到了一个StackOverflow错误。任何想法是什么导致了这一点,以及我如何改变我的代码,实际上找到骑士之旅,并摆脱这个错误。项目是为我的CS280课程,并在周五到期,请帮助。谢谢!!

  • 一个能够让程序猿快速开发的炒鸡脚手架,核心技术Spring、JPA、Shiro。 基础环境 JDK1.8、Maven、Mysql、Redis、IntelliJ IDEA、minio、fastdfs 相关组件 - ok-admin - vue - iView - echarts - clipboard - cropperjs - lightbox - nprogress - webuploader