转换后的日出和日落时间相等

问题描述 投票:0回答:1

我正在尝试转换openweathermap提供的时间的毫秒格式,但是当我转换它们时,时间仅相差1分钟。

我尝试使用Simpledateformat进行转换。

fun formatTIme(sun:Date):String{
    val timeformat:SimpleDateFormat= SimpleDateFormat("h:m a")
    return  timeformat.format(sun)

}

sys": {
"type": 1,
"id": 9201,
"message": 0.0075,
"country": "NP",
"sunrise": 1571444437,
"sunset": 1571485599
},
"timezone": 20700,
"id": 1282682,
"name": "Thapathali",
"cod": 200
}

API call is done through Nepal,如果有帮助。为什么时间仅相差1分钟?谁能帮我

java android android-studio unix-timestamp openweathermap
1个回答
3
投票

java.time和ThreeTenABP

很抱歉,我只能编写Java代码。我相信你会翻译。为了演示,我使用此代码段。

    long sunrise = 1571444437;
    long sunset = 1571485599;
    System.out.println(formatTime(Instant.ofEpochSecond(sunrise)));
    System.out.println(formatTime(Instant.ofEpochSecond(sunset)));

输出为:

6:05 AM
5:31 PM

我已经这样声明formatTime,它可以在您的API级别上使用,请参见下面的详细信息。

static final DateTimeFormatter formatter = DateTimeFormatter
        .ofPattern("h:mm a", Locale.ENGLISH)
        .withZone(ZoneId.of("Asia/Kathmandu"));

static String formatTime(Instant time) {
    return formatter.format(time);
}

我已指定两位数的分钟来获取6:05,这是惯例,而不是6:5。如果您喜欢后者,则将格式模式字符串中的mm更改为m。如果您希望按照英语习惯以这种方式AMPM,则最好指定英语语言环境。

按照纪元的建议,将自纪元以来的秒数乘以1000得到毫秒是有效的,但是像这样进行自己的时间转换是个坏习惯。虽然乘以1000似乎很简单,但可能会使阅读代码的人感到疑惑,并且这种转换变得非常复杂且容易出错。我们有行之有效的库方法来执行这些操作,这也使我们的代码得以自我记录:我对ofEpochSecond方法的使用已经表明,该数字以秒为单位,并且无需怀疑,一切都清楚了,我思考。

如果您尚未使用Android API 26级,并且不希望外部依赖,请使用以下内容进行转换:

    TimeUnit.SECONDS.toMillis(sunrise)

这还可以更清楚地告诉读者,您正在执行从几秒到毫秒的转换。

您的代码出了什么问题?

您尚未显示出错误代码,但我认为注释很清楚。将自纪元以来的秒数视为毫秒时,日出时为1970-01-19T10:00:44.437+05:30[Asia/Kathmandu],日落时为1970-01-19T10:01:25.599+05:30[Asia/Kathmandu]。如您所述,它们之间只有不到一分钟的时间。

问题:java.time是否不需要Android API 26级?

java.time在较新和较旧的Android设备上均可正常运行。它只需要至少Java 6

  • 在Java 8和更高版本以及更新的Android设备(来自API级别26)中,内置了现代API。
  • 在非Android Java 6和7中,获得了ThreeTen Backport,这是现代类的backport(JSR 310的ThreeTen;请参见底部的链接。
  • 在(较旧的)Android上,请使用Android版的ThreeTen Backport。叫做ThreeTenABP。并确保使用子包从org.threeten.bp导入日期和时间类。

链接

© www.soinside.com 2019 - 2024. All rights reserved.