相关疑难解决方法(0)

不可变的意思是什么?

这可能是有史以来最愚蠢的问题,但我认为这对新手来说完全是一个混乱.

  1. 有人可以澄清不可变的含义吗?
  2. 为什么是String不可改变的?
  3. 不可变对象有哪些优点/缺点?
  4. 为什么一个可变对象StringBuilder比首字母和副词更受欢迎?

一个很好的例子(在Java中)将非常感激.

java string immutability

383
推荐指数
11
解决办法
17万
查看次数

C#开发人员学习Java,可能忽略的最大差异是什么?

对于正在盯着学习Java的c#开发人员来说,应该指出两种语言之间存在哪些重大差异?

也许有些人可能认为事情是一样的,但是有一些不容忽视的导入方面?(或者你真的搞砸了!)

也许就OOP结构,GC的工作方式,引用,部署相关等而言.

c# java

85
推荐指数
7
解决办法
2万
查看次数

将java.util.Date转换为"java.time"类型?

我有一个java.util.Date对象或一个java.util.Calendar对象.如何在java.time框架中将其转换为正确的类型?

我听说我们现在应该使用java.time类型来处理大部分业务逻辑.使用尚未针对java.time更新的旧代码时,我需要能够来回转换.什么类型映射到java.util.Datejava.util.Calendar

java datetime date java-time

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

如何在Java中从月份和年份生成日期?

我需要为信用卡到期日生成一个新的Date对象,我只有一个月和一年,我怎样才能根据这两个生成一个Date?我需要最简单的方法.我在这里阅读其他一些答案,但它们看起来都太复杂了.

java date

19
推荐指数
3
解决办法
6万
查看次数

Java日期 - 使用的正确类是什么?

所以整个Java Date/Calendar/GregorianCalendar事情显然是一个笑话.什么是正确的日期类使用?

编辑:为Android上的第三方构建SDK,应用程序需要提供日期

更多编辑:使这个显然是一个笑话的事情:

  • 99%的日期已被弃用
  • 日期年份从1900年开始抵消
  • Date的月份为零索引,而day为one-indexed
  • 日期是可变的
  • 您应该使用日历来创建日期...
  • ...除非你真的必须使用GregorianCalendar
    • 是否有相当一部分开发人员想要使用不同的日历?
  • Calendar.getTime()返回Date
  • 没有日期数学(比如几年中两个日期相隔多远)
    • 从纪元开始,以毫秒为单位的混乱不计算在内
  • 你不能把部分连在一起得到一个表达式(就像一年前的今天)
  • 可能更多的东西

java android

16
推荐指数
1
解决办法
531
查看次数

GregorianCalendar setFirstDayOfWeek不影响前牛轧糖上的WEEK_OF_YEAR

下面的代码给出了Nougat和pre-Nougat的不同结果.看看,如果你想要自己尝试一下.如果有人能解释我为什么并给出解决方案,我将不胜感激.

我想在所有Android版本上获得正确的WEEK_OF_YEAR值,具体取决于一周的第一天.我有一个时间表应用程序,我正在使用gregorianCalendar很多,所以我不想切换到另一个类/ lib.

    //default first day of the week is Monday for replication. I live in the Netherlands, it's weird.
    Locale l = new Locale("nl", "NL");

    GregorianCalendar test = new GregorianCalendar(l);
    test.set(Calendar.YEAR, 2017);
    test.set(Calendar.MONTH, 0);
    test.set(Calendar.DAY_OF_MONTH, 29);//this is a Sunday

    int week = test.get(Calendar.WEEK_OF_YEAR);//should be 4
    test.setFirstDayOfWeek(1);//Set it to Sunday
    int week2 = test.get(Calendar.WEEK_OF_YEAR);//should be 5 but is 4 below nougat???
Run Code Online (Sandbox Code Playgroud)

android dayofweek gregorian-calendar week-number

11
推荐指数
1
解决办法
452
查看次数

Java 13 和 Java 8 静态初始化块差异;使用不同的 IDE 版本(netbeans 8.2 与过时的 apache netbeans 12)

这两个程序之间唯一明显的区别是 Java 版本。

问题是:到底发生了什么?

该图像证明两个程序包含完全相同的代码,但产生不同的结果。

在此输入图像描述

这是代码:

static int x = 10;

static {
    x = x + 10;
}

public static void main(String[] args) {
    System.out.println(System.getProperty("java.version"));
    System.out.println(new Date(System.currentTimeMillis()));
    System.out.println(x);
}
Run Code Online (Sandbox Code Playgroud)
  • 左侧使用旧的 netbeans 发行版。

  • 右侧使用的是 apache netbeans IDE。

  • 左侧使用jdk8(见图)

  • 右侧使用的是jdk13(见图)

根据评论:jdk13 已 EOL ...但有些人在使用 jdk13 时无法重现它。

问题是:这是什么原因造成的?

  • Netbeans 分布?
  • 无聊的jdk
  • ... apache IDE 中的一些设置?
  • ...星星没有对齐?
  • ETC。

java

8
推荐指数
1
解决办法
361
查看次数

适用于地理位置不同的用户的日期操作/存储的Java最佳实践

我已经阅读了关于日期操作的所有其他Q/A,但它们似乎都没有给我满意的答案.

我有一个地理位置不同的用户项目,它Date在一些类和数据中使用.问题是我正在寻找一种有效的方法来操纵各自时区中不同用户的日期,大多数答案建议使用Joda库进行Date操作,这还不太明白,因为我还没有找到任何操作你不能用传统的Java做,所以如果有人可以解释我用Joda做什么不能用传统的Java做,那么我可以考虑使用它.

我终于开始使用System.currentTimeMillis()将日期保存到数据库(任何数据库)的方法.这样可以避免让我担心使用数据库存储日期的时区.如果我想查询数据库中的特定日期或日期范围,我会使用我想要查询的longDate来执行查询:

SELECT * FROM table1 WHERE date1>=1476653369000
Run Code Online (Sandbox Code Playgroud)

然后,在检索时,ResultSet我会使用请求数据的用户的时区long将从数据库检索到的值格式化为可读Date.

Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(resultSet.getLong(1));
cal.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta"));
Date myDate = cal.getTime();
Run Code Online (Sandbox Code Playgroud)

根据我读过的一些观点,有些人强调说存储System.currentTimeMillis()肯定不是最好的做法,然而,由于某种原因,他们都错过了说为什么它不值得推荐.我错过了什么吗?这会导致转换的性能问题Long->Date/ Date->Long?有没有使用时无法实现任何使用情况下Long,而不是Date在数据库?有人可以发布关于此的理由解释吗?

另一方面,假设我继续使用Date值来存储数据库中的日期,有没有办法避免在处理数据库时担心时区Date

提前致谢.

java database datetime date

7
推荐指数
2
解决办法
4430
查看次数

Android Room - 错误:无法弄清楚如何将此字段保存到数据库中

详细日志

error: Cannot figure out how to save this field into database. You can consider adding a type converter for it. private final java.util.Date mTime = null;

我有一个字段为的实体 var mStartTime : Date = Date() // java.util.Date

为什么cant Room持久化Date对象?什么可以是日期最好的转换器?

java android kotlin android-room

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

@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
查看次数