这可能是有史以来最愚蠢的问题,但我认为这对新手来说完全是一个混乱.
String不可改变的?StringBuilder比首字母和副词更受欢迎?一个很好的例子(在Java中)将非常感激.
对于正在盯着学习Java的c#开发人员来说,应该指出两种语言之间存在哪些重大差异?
也许有些人可能认为事情是一样的,但是有一些不容忽视的导入方面?(或者你真的搞砸了!)
也许就OOP结构,GC的工作方式,引用,部署相关等而言.
我有一个java.util.Date对象或一个java.util.Calendar对象.如何在java.time框架中将其转换为正确的类型?
我听说我们现在应该使用java.time类型来处理大部分业务逻辑.使用尚未针对java.time更新的旧代码时,我需要能够来回转换.什么类型映射到java.util.Date或java.util.Calendar?
我需要为信用卡到期日生成一个新的Date对象,我只有一个月和一年,我怎样才能根据这两个生成一个Date?我需要最简单的方法.我在这里阅读其他一些答案,但它们看起来都太复杂了.
所以整个Java Date/Calendar/GregorianCalendar事情显然是一个笑话.什么是正确的日期类使用?
编辑:为Android上的第三方构建SDK,应用程序需要提供日期
更多编辑:使这个显然是一个笑话的事情:
下面的代码给出了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) 这两个程序之间唯一明显的区别是 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 时无法重现它。
问题是:这是什么原因造成的?
我已经阅读了关于日期操作的所有其他Q/A,但它们似乎都没有给我满意的答案.
我有一个地理位置不同的用户项目,它Date在一些类和数据中使用.问题是我正在寻找一种有效的方法来操纵各自时区中不同用户的日期,大多数答案建议使用Joda库进行Date操作,这还不太明白,因为我还没有找到任何操作你不能用传统的Java做,所以如果有人可以解释我用Joda做什么不能用传统的Java做,那么我可以考虑使用它.
我终于开始使用System.currentTimeMillis()将日期保存到数据库(任何数据库)的方法.这样可以避免让我担心使用数据库存储日期的时区.如果我想查询数据库中的特定日期或日期范围,我会使用我想要查询的long值Date来执行查询:
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?
提前致谢.
详细日志
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对象?什么可以是日期最好的转换器?
我在日期逻辑方面遇到了一些问题,我已将其与 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 ×9
android ×3
date ×3
datetime ×2
android-room ×1
c# ×1
database ×1
dayofweek ×1
immutability ×1
jackson ×1
java-time ×1
kotlin ×1
string ×1
week-number ×1