【发布时间】:2021-03-26 07:10:54
【问题描述】:
我正在尝试将其中包含时区的字符串时间戳转换为具有相同时区的时间戳。但是,在执行以下代码时,我得到了默认的系统时间戳。有人可以帮我解决这个问题。下面是我正在尝试的代码。
try {
Date dt = new Date();
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
f.setTimeZone(TimeZone.getTimeZone("GMT"));
String dateString = f.format(dt);
System.out.println("DateString: "+dateString);
Date parsedDate = f.parse(dateString);
System.out.println("ParsedDate: "+parsedDate);
Timestamp timestamp = new Timestamp(parsedDate.getTime());
System.out.println("Timestamp: "+timestamp);
}catch (Exception e) {
// TODO: handle exception
}
执行上述代码时,我得到以下结果:
DateString: 2021-03-26T06:57:05.982+0000
ParsedDate: Fri Mar 26 12:27:05 IST 2021
Timestamp: 2021-03-26 12:27:05.982
但我必须在时间戳中输出 2021-03-26T06:57:05.982+0000
【问题讨论】:
-
阅读答案:stackoverflow.com/questions/2891361/…。如果您必须使用时区,最好的建议是不要使用 java.util.Date。使用 java.time 包中的类。
-
这里(至少)要提到两件事:首先,考虑@Torben 给出的评论。其次,您为什么想知道格式化的输出与未格式化的输出不同?您首先打印带有
SimpleDateFormat的Date,然后是没有任何格式的打印,最后您打印的是Timestamp... -
我想得到带有时区的时间戳,格式为 2021-03-26T06:57:05.982+0000 加上 +0530 或 -0530,这里我必须得到时间格式为 yyyy-MM-dd 'T'HH:mm:ss.SSSZ 指定时区。当我试图获得上面的输出时,它正在工作,但它是字符串,所以想在时间戳中解析它。所以试图将该字符串转换为时间戳,但它返回的是系统时间戳而不是提到的时区时间戳。
-
a
Timestamp(假设java.sql.Timestamp)只是一个瞬间,不涉及时区。您可以在不同的时区给出它的表示。也许您需要一个ZonedDateTime,即具有相应时区的日期和时间;甚至是完全没有时区的LocalDateTime
标签: java timestamp timestamp-with-timezone sql-timestamp