【问题标题】:Convert float to time in Java?在Java中将浮点数转换为时间?
【发布时间】:2011-12-30 14:10:24
【问题描述】:

是否可以在 Java 中将浮点数转换为时间?

我是 Web 服务的新手,我正在尝试调用一个简单的日出/日落时间 Web 服务,其 WSDL 是 here

我已经通过服务传递了纬度 (34.0888)、经度 (-118.40612)、日、月和年,我得到了返回值:

日出:13.6935135 日落:26.607845

但是这些值是浮点数,有人知道为什么会这样吗?或者是否可以从他们那里计算出时间?我认为这可能是 Unix 时代,但我运气不佳。

感谢任何帮助,谢谢

【问题讨论】:

  • 你确定那些不是双打吗?
  • 根据 WSDL,它们是浮点数,但没有关于它们代表什么的任何文档。一旦你知道它们代表什么,转换为时间是很困难的
  • 网络服务返回浮点数。我可以将它们分配给一个双变量,但我只得到 13.093513488769531 和 26.607845306396484。
  • 这些结果很奇怪。你是在哪一天、哪一个月、哪一年通过的?如果您改变季节会发生什么,您是否看到这些值遵循标准季节模式的证据?
  • 是的,我不知道它们代表什么,我希望日期/时间可能有一种常见的方式表示为浮点数

标签: java web-services time floating-point


【解决方案1】:
Float sunriseFloat = new Float(sunrise);  
Float sunsetFloat = new Float(sunset);

    Date startDate = new Date(sunriseFloat.longValue());  
    Date endDate = new Date(sunsetFloat.longValue());

【讨论】:

  • 不知道为什么不赞成这个问题是如何将浮点数转换为时间。
  • 感谢您的回复,我看到您的代码有错误,因为我的日出值是浮点数:无法在原始类型浮点数上调用 longValue()
  • @ostegg548 已更新。甚至没有考虑来回拳击。
  • 这段代码是否适用于 unix 时间?我得到的日期是 1970 年 1 月 1 日星期四。不过,我认为它不会返回 unix 时间。
【解决方案2】:

这似乎不是 java 问题,您发现了一个未指定接口的 web 服务。我用谷歌搜索了一个解决方案,我发现了几个能够计算日出和日落的库。例如,这是第一个结果:http://www.jstott.me.uk/jsuntimes/

【讨论】:

    【解决方案3】:

    相对于 UTC,这可能是几个小时。我会尝试这样的事情:

    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.add(Calendar.HOUR_OF_DAY, (int) sunrise);
    calendar.set(Calendar.MINUTE, (sunrise * 60) % 60);
    calendar.set(Calendar.SECOND, (sunrise * 3600) % 3600);
    

    然后用DateFormat在你想要的时区显示日期:

    DateFormat fmt = new SimpleDateFormat();
    fmt.setTimeZone(TimeZone.getTimeZone("Europe/Paris")); 
    System.out.println(fmt.format(calendar.getTime()));
    

    【讨论】:

    • 谢谢,它输出正确的日期,但时间已经关闭。它总是在小时内出现,没有分钟。使用上面的代码,我在 CA 州 15:00 日出,在英国 08:00。
    【解决方案4】:

    计算起来似乎不是一件微不足道的事情......这里有一个完整的包来处理它:https://github.com/mikereedell/sunrisesunsetlib-java

    【讨论】:

    • 我同意停止使用未指定的网络服务并采用(本地)库进行计算!
    • 那你为什么不试试helloWorld服务!? ;-)
    • 好的...我认为你选错了!首先,我建议尝试使用亚马逊的网络服务(或其他大公司的网络服务)。通常它们都有很好的记录,您可以专注于您的错误(而不是对方的错误)。 (或 HelloWorld 服务 ;-))
    猜你喜欢
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    相关资源
    最近更新 更多