Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JDK1.7上将GMT datetime SQL数据类型转换为JAVA EST时间戳_Java_Date Formatting_Jdk1.7 - Fatal编程技术网

如何在JDK1.7上将GMT datetime SQL数据类型转换为JAVA EST时间戳

如何在JDK1.7上将GMT datetime SQL数据类型转换为JAVA EST时间戳,java,date-formatting,jdk1.7,Java,Date Formatting,Jdk1.7,GMT SQL server中的日期时间数据类型: 列名=PostedDateTime 数值=2019-09-30 17:46:04.600 我试图使用JAVA代码将datetime值转换为EST时间戳 因此,输出应为: 2019-09-30 13:46:04 有什么想法如何转换这个,请包括需要导入的软件包 到目前为止,我有: SimpleDateFormat dr = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); SimpleDateFo

GMT SQL server中的日期时间数据类型: 列名=PostedDateTime 数值=2019-09-30 17:46:04.600

我试图使用JAVA代码将datetime值转换为EST时间戳 因此,输出应为: 2019-09-30 13:46:04

有什么想法如何转换这个,请包括需要导入的软件包

到目前为止,我有:

SimpleDateFormat dr = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
SimpleDateFormat dr1 = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
String dateString = obj.getStringProperty("S_DISCUSSION_POSTEDDATETIME");
Date date = dr.parse(dateString);           
strRetBuffer.append(obj.getStringProperty("S_DISCUSSION_AUTHOR") + ": " + dr1.format(date) + ": " + obj.getStringProperty("S_DISCUSSION_TOPICNAME")+": " +obj.getStringProperty("S_DISCUSSION_BODY") + "\n\r" );

首先,使用
DateTimeFormatter

String date = "2019-09-30 17:46:04.600";

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");

DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

LocalDateTime local = LocalDateTime.parse(date, formatter);
然后使用时区
GMT
LocalDateTime
转换为
ZonedDateTime
,即
UTC+0

ZonedDateTime zone = ZonedDateTime.of(local, ZoneId.of("UTC"));
最后,使用
US/Eastern
和输出格式将
ZonedDateTime
转换为
LocalDateTime

String output = zone.withZoneSameInstant(ZoneId.of("US/Eastern")).toLocalDateTime().format(outputFormat);

嗨,埃里克。请分享您的代码,您是如何实现您的目标?我已经共享代码,我不知道如何转换它。EST。可能的副本考虑扔掉长期过时和臭名昭著的麻烦<代码> SimpleDateFormat <代码>和朋友,并添加到您的项目中,以便使用<代码> java。现代Java日期和时间API。使用它更好。您是否可以在JavaJDK1.7上完成它。您提供的代码仅在JDK1.8上工作,以获取java.time.*类。是的,您可以在JDK1.7上执行此操作,因为java.time(Java1.8中引入的现代java日期和时间API)已经进行了后端口。获取并将其添加到您的项目中,使用子包从
org.threeten.bp
导入,并享受与旧的、设计拙劣的datetime类相比,使用它有多好。非常小的一点,
US/Eastern
不受欢迎。改用
美国/纽约
。它给出了相同的结果。或者
美国/多伦多
如果加拿大想要东部时间。现代时区ID格式为地区/城市。
        String x = "2019-09-30 17:46:04.600";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
        Date date = formatter.parse(x);
        System.out.println(date);
        System.out.println(formatter.format(date));
        outputFormat.setTimeZone(TimeZone.getTimeZone("America/New_York"));
        System.out.println(outputFormat.format(date));