lon*_*ony 11 java timezone date
我搜索一种方法来计算给定时区即位置的日出和-set.我想要类似于Zend_Date的东西.
我们的想法是拥有一个应用程序,您可以在其中选择一个位置,并根据您获得实际时间和日出时间.
干杯和谢谢,
-lony
dog*_*ane 10
看看sunrisesunsetlib-java,它根据GPS坐标和日期计算日出/日落时间.
您可能要使用commons-suncalc,它是Java 7的无依赖库:
Date date = // date of calculation
double lat, lng = // geolocation
SunTimes times = SunTimes.compute()
.on(date) // set a date
.at(lat, lng) // set a location
.execute(); // get the results
System.out.println("Sunrise: " + times.getRise());
System.out.println("Sunset: " + times.getSet());
Run Code Online (Sandbox Code Playgroud)
计算日出和日落实际上是一个非常难以解决的问题,大多数声称能做到这一点的图书馆都使用过于简单的太阳系模型,实际上并不能产生准确的结果。
地球围绕太阳的轨道和月球围绕地球的轨道是不规则的,地球的自转轴以两种不同的方式摆动(进动和章动),天文学家使用的时间尺度与协调世界时不一致(世界标准时间)。最重要的是,大气折射会扭曲天体的感知位置(尤其是在地平线附近);太阳和月亮的升起和落下通常是由圆盘第一次出现在地平线上方来定义的,而不是圆盘中心经过的时候;圆盘的感知大小随着时间的推移根据其与观察者的距离而变化。
我需要对我正在从事的一个项目进行准确的计算,并编写了一个库来实现它,其中包含所有最先进的模型。
我们还为此提供了一个 Web API,Web API 和 Java 库都可以在以下位置找到:
该网站还提供了许多取决于纬度和经度的其他信息。您可以在这里阅读有关图书馆的详细信息:
http://askgeo.com/database/Astronomy
该库和 Web API 是商业性的,但我们向符合条件的非营利组织、研究人员和开源项目免费提供 Web API 访问权限。对于商业用户,定价信息位于:
提供日出和日落(以及其他信息)的图书馆是列表中的“天文学”图书馆。
刚才,我发布了Time4J-v4.29,它也支持日出/日落计算。例:
SolarTime hamburg = SolarTime.ofLocation(53.55, 10.0);
Optional<Moment> result = PlainDate.nowInSystemTime().get(hamburg.sunrise());
System.out.println(result.get().toZonalTimestamp(() -> "Europe/Berlin"));
Run Code Online (Sandbox Code Playgroud)
Java-8兼容性:
通常可以通过调用method 将class SolarTime(类型为Moment或PlainTimestamp)的结果轻松转换为Java-8类型,例如Instant或。LocalDateTimetoTemporalAccessor()
关于算法:
主要算法与NOAA使用的算法相同(主要区别在于,Time4J也考虑了增量T计算)。NOAA算法(实际上与Jean Meeus开发的算法相同)比@dogbane答案中提到的Sunrisesunsetlib库所使用的Williams算法更为精确,特别是在极地附近或极地。但是,Time4J还通过指定计算器名称来支持Williams算法。这种简单的算法仍可在正常地理位置使用,并产生1-2分钟的精度。
其它功能:
还支持一些blue头,例如蓝色小时,各种暮光定义,日照长度或确定极夜/午夜太阳或观察者的高度影响,请参阅API。
关于精度的注意事项:
无论如何,我们应该始终牢记,山区或特殊天气条件等拓扑事实对日出/日落的实时性有很大影响,并且不能在任何支持日出/日落计算的库中进行建模。
Android:
对于Android平台,请使用具有优化资源访问权限的Time4A(Time4J的姐妹)。