- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 TimePickerDialog,它可以让用户选择一个时间。 TimePickerDialog 有一个 onTimeSet
方法,当用户完成选择时间时调用该方法。我将参数传递给第二个方法 setTime(int hour, int minute)
,它保存值并显示格式化时间。以下是该方法的代码 fragment :
java.text.DateFormat dateFormatter =
java.text.DateFormat.getTimeInstance(java.text.DateFormat.SHORT, Locale.getDefault());
DateTime dt = new DateTime();
dt = dt.hourOfDay().setCopy(hour);
dt = dt.minuteOfHour().setCopy(minute);
String text = dateFormatter.format(dt.toDate());
问题是(有时,并非总是)小时值偏差一小时甚至两小时。我认为问题的原因与时区有关,但我不知道确切的原因是什么。我还认为问题是由 Joda DateTime 对象引起的,因为在我实现 Joda 时间之前我没有遇到任何问题,而且它也会在一小时后保存。知道会发生什么/如何解决它吗?
最佳答案
对于这个答案,我使用的是 joda-time 2.7(尽管它可能适用于以前的版本)。
我还假设您的程序只关心小时 和分钟(我不是 Android 专家,但我看到了来自 TimePickerDialog< 的文档
似乎是这样)。
因此,如果您只处理小时 和分钟,则不需要使用DateTime
类(实际上您不应该t 在这种情况下)。
那是因为 DateTime
对象“知道”所有日期字段,包括日、月、年和时区。因此,当您创建一个 new DateTime()
时,它会创建一个具有默认时区中当前日期和时间的新对象。如果默认时区的当前日期是夏令时(又名夏令时),您可以进行这些小时转换。
(而且我相信 Android 从设备的系统中获取默认时区,因此它会根据运行代码的设备而有所不同 - 至少它在计算机中是这样工作的,所以对于设备)。
因为你不需要知道日/月/年和时区,你可以使用 LocalTime
类 (org.joda.time.LocalTime
) 这是一个只有小时和分钟字段(如果需要,还有秒;如果您不关心秒,它们将被设置为零).最好的部分是:这个类不关心时区,所以 10:00 AM 将永远是 10:00 AM。
您也不需要使用 java.text.DateFormat
,因为 joda-time 有自己的格式化程序。所以代码将是这样的:
public void setTime(int hour, int minute) {
// shortTime() is equivalent to DateFormat.SHORT
DateTimeFormatter fmt = DateTimeFormat.shortTime().withLocale(Locale.getDefault());
LocalTime time = new LocalTime(hour, minute);
String text = fmt.print(time);
System.out.println(text);
}
做一些测试(假设默认语言环境是en_US):
setTime(9, 30); // prints 9:30 AM
setTime(10, 0); // prints 10:00 AM
PS:输出可能会根据您的默认 Locale
而有所不同(我也相信它来自设备的系统)。如果你想要一个固定的格式(独立于语言环境),你可以使用 DateTimeFormat.forPattern("h:mm a")
,这也会导致上面的输出(当你以这种方式使用格式化程序时,默认语言环境不会更改输出)。
关于Android Joda DateTime 关闭一小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43040081/
我是 grails 的新手。我正在使用 joda 插件来获取日期和时间。所以我在单独的列中显示日期和时间。现在我想使用条件搜索日期。 我在 gsp 页面中使用以下代码来搜索日期。
我试图在执行更多计算之前简单地将 TimeZone 信息添加回 LocalDate。 LocalDate 来自使用 ObjectLab LocalDateCalculator 将天数添加到现有 Dat
所以我在使用 JodaTime 年表 IslamicChronology 解析日期时遇到问题,因此编写了一个小示例来演示我的问题。 代码如下: import org.joda.time.Chronol
当我启动我的应用程序时,virgo 会抛出这样的异常: [2015-09-05 11:27:53.254] TCP Connection(2)-127.0.0.1 Installation of
我使用 Spring 从 Web API rest API 检索 JSON 数据,使用 Jackson Joda 模块反序列化 ISO 日期,并将其转换为 Joda DateTime。 Spring
在 Android 设备 (7.0) 上,出现此崩溃: Fatal Exception: org.joda.time.IllegalInstantException: Illegal instant
我需要将 GMT 转换为亚利桑那时间。亚利桑那州目前有 MST(夏令时关闭)。 但是在 Joda Time DateTimeZone 代码中,MST 已映射到 America/Denver: map.
大家早上好。 我想帮助您了解如何使用 1.2.1.1 版本的 Joda Time 完成 org.joda.time.DateTime 到 java.util.Date 的转换。 为什么选择 Joda
试试这个: @Type(type = "org.jadira.usertype.moneyandcurrency.joda.PersistentMoneyAmountAndCurrency") pri
尝试使用 Joda 将包含日期字符串的 JSON 字符串反序列化为 POJO 时遇到异常。 我将 Jackson2 与 Spring 和 Robospice 一起使用。 我遇到以下异常: Could
我有一个招摇的OpenAPI YAML文件,我想使用gradle-swagger-generator-plugin生成Java 这是我的config.json { "useRxJava2": tr
我想使用以下 MDX 语句: with member [x] as now()->plusMonths(1)->withDayOfMonth(1)->minusDay(1) select [x] on
System.out.println( PeriodFormat.getDefault().print(Period.hours(1).plusMinutes(30).plusSeconds(60))
我正在使用 Joda-Time Duration 来获取两个 DateTime 之间的持续时间: DateTime startTimeDate = new DateTime(startTimeDate
当我运行以下代码片段时: import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import java.sql.Times
我正在尝试在 Joda DateTime 中转换毫秒。米利斯是 1338501600000我使用了在线转换器和其他库,所有结果都是 1338501600000 millis 是 Fri Jun 01
我尝试使用以下代码,但收到错误格式无效:“12/11/2013”: String dFrom = ps.utils.gv(request, "dFrom"); String dTo = ps.ut
我正在尝试使用 Joda-Time 的持续时间类来计算两天之间的确切天数差异。这意味着我希望结果是 25.48 天,而不是仅仅 25 天。现在我有: private static final doub
有没有隐藏的方法来获得 Joda-Time以分钟为单位的时间段(或任何其他) 现在我做的是: (period.getHours()*60 + period.getMinutes() + roundTw
有谁知道如何解析日期,例如:Mon Aug 04 16:07:00 CEST 2014使用 Joda 的 DateTime 格式化程序转换为 dd/MM/YYYY HH:MM:SS。我已经尝试过了:
我是一名优秀的程序员,十分优秀!