相关疑难解决方法(0)

@JsonFormat DEFAULT_TIMEZONE 似乎不起作用

我在日期逻辑方面遇到了一些问题,我已将其与 JSON 序列化程序 Jackson 隔离。

在数据库和应用程序的调试点中,日期是正确的,并且所有内容都使用默认时区编写。但是,在序列化中增加了 4 个小时。我发现这可以通过专门告诉 Jackson 使用 EST(默认为 UTC)来解决。如下:

@JsonFormat(shape= JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss.SSSZ", timezone="America/New_York")
private Date startDate;
Run Code Online (Sandbox Code Playgroud)

但是,问题是只有本地使用 EST,而服务器将使用 UTC。我需要杰克逊使用系统默认值。

幸运的是,我发现了这个文档支持的类似问题。新解决方案:

@JsonFormat(shape= JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss.SSSZ", timezone=JsonFormat.DEFAULT_TIMEZONE)
private Date startDate;
Run Code Online (Sandbox Code Playgroud)

然而,它不起作用!我也尝试过timezone='DEFAULT_TIMEZONE'其他各种方法,但在所有情况下,api 输出似乎仍然比数据库中的数字早 4 小时。

我尝试过的其他事情:

  • 注销JsonFormat.DEFAULT_TIMEZONE返回##default
  • 日志TimeZone.getDefault().getDisplayName()返回Eastern Standard Time

杰克逊版本是 2.9。

有什么建议?

java serialization jackson

7
推荐指数
1
解决办法
6351
查看次数

java.util.Date和java.util.Calendar是否已被弃用?

似乎新的java.timeAPI提供了所有内容java.util.Date以及更多内容.自Java 8以来新的API出现时
是否有任何理由使用?应和完全避免?java.util.Datejava.timejava.util.Datejava.util.Calendar

java.util.date java-8 jsr310

6
推荐指数
1
解决办法
3199
查看次数

Java时间落后一小时

我的应用程序严重依赖于Java.我们做了大量的日志记录,数据库插入等.在白天的灯光定时开关之后,我们注意到所有的Java时间都落后了大约一个小时.我们的版本是1.6_18.我认为这个问题在早期版本的Java中得到了解决.如果有任何补丁,请建议可以做什么.

java time

5
推荐指数
1
解决办法
2012
查看次数

MST 被映射到 joda 中的丹佛时区,当前是 MDT。这是 joda DateTimeZone 中的错误吗?

我需要转换GMT为亚利桑那州时间。亚利桑那州目前已MST关闭夏令时。

然而在 Joda TimeDateTimeZone代码中,MST已映射到America/Denver

map.put("MST", "America/Denver");
Run Code Online (Sandbox Code Playgroud)

可以看出,目前丹佛实行夏令时,因此有MDTDateTimeZone那么为什么要在代码中进行这样的映射呢?

在从 转换为亚利桑那州本地时区时GMT,我得到了偏移量,因为GMT-6这是错误的,而且应该是这样GMT-7,因为MST没有夏令时。

这是一个错误吗?如何解决问题?

java jodatime timezone-offset

5
推荐指数
1
解决办法
1350
查看次数

比较不同时区的两个日期对象并获取精确的时间差(以秒为单位)

我正在尝试将电子邮件(日期对象)的接收日期与 JSONObject 中的日期(字符串)进行比较。这两个日期将属于不同时区,相差 1 小时。

我的情况是,我必须在几秒钟内获得它们之间的确切差异,如果差异为 +/- 10 秒,我就会找到匹配项。为此,我决定将两者都转换为“UTC”,然后进行区别。这是我的代码:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

String MsgDtStr = sdf.format(messagesToBeProcessed.getReceivedDate()); 

Date MsgDt = sdf.parse(MsgDtStr);

Date ObjDt = sdf.parse((JsonObj.get("date").toString()));

int DiffInSecs = (int) (ObjDt.getTime() - MsgDt.getTime()) / 1000 % 60;

if (DiffInSecs >= -10 && DiffInSecs <= 10) {
                System.out.println("Found a match!");
                MatchedList.add(i);
}
Run Code Online (Sandbox Code Playgroud)

这似乎给了我正确的结果。应该与 json 对象匹配的邮件匹配。即差异为 +/- 10 秒。但是,当我尝试打印日期并DiffInSecs在上述逻辑之后,我得到如下值:

date in object: 2017-06-22 19:47:25
date in message: 2017-06-22 23:47:30
DiffInSecs: -5

        ........

date in object: 2017-06-22 17:50:38
date …
Run Code Online (Sandbox Code Playgroud)

java timezone date date-difference

5
推荐指数
1
解决办法
1万
查看次数

将字符串在12(PM/AM)小时AM PM时间转换为24小时时间android

我有来自服务器的转换时间的问题,我想将其转换为24小时.我正在使用以下代码:

String timeComeFromServer = "3:30 PM";

SimpleDateFormat date12Format = new SimpleDateFormat("hh:mm a");

SimpleDateFormat date24Format = new SimpleDateFormat("HH:mm");
try {
    ((TextView)findViewById(R.id.ahmad)).setText(date24Format.format(date12Format.parse(timeComeFromServer)));
} catch (ParseException e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

有错误:

方法抛出'java.text.ParseException'异常.)

详细的错误消息是:

无法解释的日期:"下午3:30"(偏移5)

但是,如果我更换PMp.m.它的工作原理没有任何这样的问题:

 timeComeFromServer = timeComeFromServer.replaceAll("PM", "p.m.").replaceAll("AM", "a.m.");
Run Code Online (Sandbox Code Playgroud)

谁能告诉我哪种方法正确?

time datetime android datetime-parsing

5
推荐指数
1
解决办法
729
查看次数

Java 日期格式为 00 天/月

我的日期为String,但有时它没有有效的日期或月份(值为零,00)。

例子:

String value = "03082017";
Run Code Online (Sandbox Code Playgroud)

然后我这样做:

    String day = value.substring(0,2);
    String month = value.substring(2,4);
    String year = value.substring(4,8);

    if(day.equals("00")) {
        day = "01";
    }
    if(month.equals("00")) {
        month = "01";
    }

    value = day + month + year;
Run Code Online (Sandbox Code Playgroud)

这适用于示例String

现在我有这个字符串:

String value = "00092017" //ddMMyyyy 
Run Code Online (Sandbox Code Playgroud)

然后我的代码将00日期转换为01.

这适用于模式ddMMyyyy,但现在是我的问题:我可以有不同的模式:ddMMyyyyMMddyyyyyyyy/dd/MM

我的解决方案是首先检查模式(例如MMddyyyy),然后查看我的值03092017ddMMyyyy)并将数字放入我的日期字符串中,该字符串位于模式中的 dd 位置。

所以代码有模式ddMMyyyy但值为03092017( MMddyyyy …

java date zero date-parsing dayofmonth

5
推荐指数
1
解决办法
1337
查看次数

如何从 ISO 8601 格式字符串中选择时区到日历实例中

作为输入,我有一个字符串,它是 ISO 8601 中的字符串,用于表示日期。例如:

“2017-04-04T09:00:00-08:00”

String的最后一部分“-08:00”表示时区偏移。我将此字符串转换为Calendar实例,如下所示:

Calendar calendar = GregorianCalendar.getInstance();
Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US).parse(iso8601Date);
calendar.setTime(date);
Run Code Online (Sandbox Code Playgroud)

iso8601日期为“2017-04-04T09:00:00-08:00”

但这不会选择时区,如果我从Calendar实例获取时区,它会给出笔记本电脑当前设置的实例,并且不会从 ISO 8601 字符串中获取时间戳。我通过日历实例检查时区:

calendar.getTimeZone().getDisplayName()
Run Code Online (Sandbox Code Playgroud)

有人可以展示如何在Calendar实例中选择时区吗?

java android date datetime-parsing java.util.calendar

5
推荐指数
1
解决办法
3432
查看次数

以所需的时区显示从毫秒开始的正确时间

我正在开发一个应用程序,它从Google TimeZone API. 只是我有时间在地球上所需的地方以毫秒为单位。

例如:1504760156000它显示的是伦敦的日期时间

2017 年 9 月 7 日星期四 09:55:56

由于我在+05:00UTC 的时区,如果我操纵1504760156000这些毫秒,它将显示整个日期时间,如下所示:

2017 年 9 月 7 日星期四 09:55:56 GMT+0500(巴基斯坦标准时间)

但我想表明:

2017 年 9 月 7 日星期四 09:55:56 GMT+0100(英国夏令时间)

问题是:我有正确的伦敦日期和时间,但可以在不更改时间的情况下显示/更改时区,因为根据伦敦时间是正确的。

更新

得到一些评论后。在我的例子中,你没有把我带到这里。

假设我在巴基斯坦,时间在这里,1:55 PM所以我通过我的应用程序要求 GOOGLE API 告诉我伦敦的时间是什么时候。Google API 告诉我伦敦的时间是1504760156000(上午 9 点 55 分)以毫秒为单位,如果我将这些毫秒转换为Date对象,它将打印如下:

Date date =new Date(1504760156000)
Run Code Online (Sandbox Code Playgroud)

2017 年 9 月 7 日星期四 09:55:56 GMT+0500(巴基斯坦标准时间)

它会根据我的本地时区操作它,但我想要如下结果

2017 年 9 月 7 日星期四 09:55:56 …

timezone datetime android google-api timezone-offset

5
推荐指数
1
解决办法
6731
查看次数

在 Kotlin Android(最低 Android 版本 21)中解析日期的正确方法。我的解析不起作用

我想以这种格式解析此日期 2021-11-03T14:09:31.135Z ( message.created_at)

我的代码是这样的:

val dateFormat = SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS")
var convertedDate = Date()
try {
    convertedDate = dateFormat.parse(message.created_at)
} catch (e: ParseException) {
    e.printStackTrace()
}
Run Code Online (Sandbox Code Playgroud)

解析失败

java parsing android date kotlin

5
推荐指数
2
解决办法
3474
查看次数