GregorianCalendar test= new GregorianCalendar();
BigDecimal coef=new BigDecimal(-2113480800);
test.setGregorianChange(new Date(Long.MIN_VALUE));
test.set(Calendar.DAY_OF_MONTH, 31);
test.set(Calendar.MONTH, 11);
test.set(Calendar.YEAR, 1600);
test.add(Calendar.DAY_OF_MONTH,-583657);
System.out.println((test.getTime()));
// I should get Jan 1 0003 but i get 03 jan 0003 OFFSET of 2
回答
您正在使用的日历是罚款 - 你只需要记住一个Date
只店的时间瞬间。它不记得日历,时区或文本格式。
你得到的Date
值是正确的 - 它具有-62072462953058的纪元毫秒,对应于0003-01-01T17:10:46Z(至少对我来说 - 取决于你运行代码的时间)在不使用格里高利变化的系统中。
但是,Date.toString()
格式那一刻如果有是格里高利的变化,导致两天的抵消。
您可以通过使用Java 8的Instant
而不是看到这一点:
import java.time.*;
import java.util.*;
public class Test {
public static void main (String args[]) {
GregorianCalendar test = new GregorianCalendar();
test.setGregorianChange(new Date(Long.MIN_VALUE));
test.set(Calendar.DAY_OF_MONTH, 31);
test.set(Calendar.MONTH, 11);
test.set(Calendar.YEAR, 1600);
test.add(Calendar.DAY_OF_MONTH,-583657);
Date date = test.getTime();
Instant instant = Instant.ofEpochMilli(date.getTime());
System.out.println(date);
System.out.println(instant);
}
}
输出(目前,在伦敦):
Wed Jan 03 17:15:26 GMT 3
0003-01-01T17:15:26.913Z
两个值表示同一时间点,但Instant
转换为字符串不会执行Julian/Gregorian转换,而Date
会转换为字符串。
我想要做的是从ANSI/UNIXTIMESTAMP格式添加一定的时间到ISO格式考虑他们的起源。我输入的日期被转换为UNIXTIMESTAMP/ANSI,我必须将它转换回相同的日期。 TimeZone和currentTime可以忽略。我只需要在几秒或几天内加减一些ORIGIN的时间。 – 1234jkl
我不确定你的意思是“ANSI/UNIXTIMESTAMP格式” - 或者它与你显示的问题有什么关系。我建议你问一个可以证明这一点的新问题。 –
我只是想在上面做的是,我想添加-583657天到原始1600/12/31,1601年1月1日00:00:00的时间格式为第1天。因此,-583657会意思是在上述原点加上-583657天后的日期。但是,使用格鲁吉亚日历我得到Jan 3,0003 00:00:00。但是,实际日期是1月1日0003 00:00:00。 java中的公历日历是与Julian日期的混合体,即使我根据API将setGregorianChange()设置为根据要转换为proleptic的API,我也会得到一定的偏移量,同时减去天数。你能告诉我一个更好的方法吗? – 1234jkl
- 1. 转换Date对象到日历对象
- 2. 转换改变的GregorianCalendar到日期
- 3. 转换C#日期时间为GregorianCalendar的日期
- 4. GregorianCalendar或只是日历
- 5. 与时间,SimpleDatetimeFormat,日历,GregorianCalendar的
- 6. 日历(GregorianCalendar).complete()方法不可见?
- 7. 日历的GregorianCalendar方法将日期设置为前一天
- 8. 转换为Date
- 9. 将JSF日历日期转换为JodaTime中的转换器
- 10. GregorianCalendar的不断日期
- 11. 将日历转换为java.util.Date的问题
- 12. 从日历的Android转换为ISO 8601
- 13. 的PHP/SQL转换日历
- 14. SWING的转换日历
- 15. 转换日历
- 16. 我应该使用GregorianCalendar还是Date作为生日场地?
- 17. 将日历转换为日期
- 18. 将日期转换为日历问题
- 19. 将字符串转换为GregorianCalendar
- 20. 如何将java.sql.Date对象转换为GregorianCalendar?
- 21. 如何在纯Vimscript中将{date}转换为{time}
- 22. 将Julian日期转换为Postgresql中的日历日期
- 23. 更新转换后存储为VARCHAR的表中的DATE
- 24. 日历日期转换为行与假期与状态更新
- 25. 转换新的Date(),以不同的时区
- 26. 'CompareEndTodayValidator'不能转换为'Date'类型。
- 27. android将Date转换为TimeStamp
- 28. 将Java Date转换为Php
- 29. 从字符转换为Date
- 30. 将NVARCHAR(255)转换为DATE
为什么你创建了一个'BigDecimal',然后忽略它? –