我试图在eclipse调试器中设置值
private transient long fastTime;
Run Code Online (Sandbox Code Playgroud)
在一个java.util.Date.
我想在2010年1月1日的某个时间设置日期,该日期基于http://www.epochconverter.com是值(以毫秒为单位)1262362075000.
这个字段应该是long类型的但是当我尝试设置这个字段时(fastTime)我被eclipse告知这个值对于字段来说太大了.
我究竟做错了什么?

作为某些逻辑的一部分,在我的程序中有必要将长Java时间戳(包括年,月等)转换为"短"Java时间.这应该对应于原始时间的完全相同的小时,分钟和秒,但是在1970年1月1日的1天内(即0(00:00:00)和86400000(23:59:59)之间的值).一个例子是问题中的转换.
为了执行此操作,我认为以下代码将起作用:
public int convertToTime(long fullTimeStamp) {
Calendar c = Calendar.getInstance();
c.setTimeInMillis(date);
c.set(Calendar.DATE, 1);
c.set(Calendar.MONTH, 0);
c.set(Calendar.YEAR, 1970);
return (int) c.getTimeInMillis();
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是与时区有关.在英国,我们目前在BST.使用该功能设置所有值后,时间保持相同的数字(例如,早上8点),但将时区更改为GMT!格林威治标准时间早上8点与BST早上8点不一样,而是等于早上9点BST.
向该函数添加一些控制台输出会演示此问题:
public int convertToTime(long fullTimeStamp) {
System.out.println(new Date(fullTimeStamp)); // correct
Calendar c = Calendar.getInstance();
c.setTimeInMillis(fullTimeStamp);
System.out.println(c.getTime()); // correct
c.set(Calendar.DATE, 1);
c.set(Calendar.MONTH, 0);
c.set(Calendar.YEAR, 1970);
System.out.println(c.getTime()); // incorrect!
return (int) c.getTimeInMillis();
}
Run Code Online (Sandbox Code Playgroud)
节目输出:
Wed Jun 19 12:15:00 BST 2013 // ok
Wed Jun 19 12:15:00 BST 2013 // this makes sense
Thu Jan 01 12:15:00 GMT 1970 // …Run Code Online (Sandbox Code Playgroud) "2021-09-17 11:48:06 UTC"
Run Code Online (Sandbox Code Playgroud)
我想解析以下字符串并创建一个LocalDateTime对象或Instant
我知道你可以写这样的东西
String dateTime = "2021-09-17 11:48:06 UTC";
LocalDateTime dt = LocalDateTime.parse(dateTime,DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
Run Code Online (Sandbox Code Playgroud)
如何处理UTC字符串中的部分?
尝试在 Date 中设置时区(我知道 Date 已弃用)
LOG.error(modifiedDate + "Date in service"); //Mon Sep 21 06:15:00 CDT 2020
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z", Locale.ENGLISH);
format.setTimeZone(TimeZone.getDefault());
String dateString = format.format(modifiedDate);
LOG.error(dateString + " dateString"); //2020-09-21 06:15:00 -0500
Date date = format.parse(dateString);
LOG.error(date + " date after parsing"); //Mon Sep 21 06:15:00 CDT
Run Code Online (Sandbox Code Playgroud)
解析后时区没有改变,我错过了什么?
请考虑以下代码段.
TimeZone tz = TimeZone.getTimeZone("GMT");
System.out.println(tz);
Calendar cal = Calendar.getInstance();
cal.set(2017, Calendar.DECEMBER, 25);
System.out.println("before setting time zone: " + cal.getTime());
cal.setTimeZone(tz);
System.out.println("after setting time zone: " + cal.getTime());
Run Code Online (Sandbox Code Playgroud)
结果如下:
sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
before setting time zone: Mon Dec 25 22:39:53 EST 2017
after setting time zone: Mon Dec 25 22:39:53 EST 2017
Run Code Online (Sandbox Code Playgroud)
在时区更改后,为什么日期的打印输出仍显示EST?不应该是GMT吗?
我想将日期格式从 更改"20230523154325"为2023-05-23T15:43:25+0000".
我有这段代码,但不幸的是结果是这样的:"2023-05-23T15:43:25+0300"。
所以我不想拥有,我想最后+0300拥有。+0000所以,这部分应该是完全相同的2023-05-23T15:43:25,而不是+0300应该是+0000。+0000把这个放在最后很重要。任何反馈将不胜感激!
public static void main(String[] args) {
String oldDate = "20230523154325";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
Date newDateFormat = null;
try {
newDateFormat = sdf.parse(oldDate);
} catch (ParseException e) {
throw new RuntimeException(e);
}
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
System.out.println("The date is " + sdf1.format(newDateFormat));
}
Run Code Online (Sandbox Code Playgroud)