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



我正在尝试转换 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.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设备上都能很好地工作。它只需要至少Java6

  • 在 Java 8 及更高版本以及较新的 Android 设备(从 API 级别 26(中,内置了现代 API。
  • 在非Android Java 6和7中,获得ThreeTen Backport,现代类的反向移植(JSR 310的ThreeTen;请参阅底部的链接(。
  • 在(较旧的(Android上使用Android版本的ThreeTen Backport。它被称为ThreeTenABP。并确保从带有子包的org.threeten.bp导入日期和时间类。

链接

  • Oracle 教程:日期时间解释如何使用 java.time。
  • Java 规范请求 (JSR( 310,其中首次描述了java.time
  • ThreeTen Backport 项目,将java.time向 Java 6 和 7 的反向移植(JSR-310 为 ThreeTen(。
  • ThreeTenABP,ThreeTen Backport 的安卓版
  • 问:如何在Android项目中使用ThreeTenABP,并进行了非常详尽的解释。

最新更新