我正在尝试使用时区UTC将毫秒转换为Timestamp,但是它没有按预期工作,因为它转换为我的localdatetime。
我尝试了以下操作。在调试代码时,我发现执行此命令new DateTime(eventDate)
可以正常工作,因为它的值为10:34:18.721
,但是后来新的Timestamp()将其更改为localdatetime。
long eventDate = 1566297258721L;
DateTimeZone.setDefault(DateTimeZone.UTC);
Timestamp timestamp = new Timestamp(new DateTime(eventDate).getMillis());
我希望输出为:2019-08-20 10:34:18.721 ,但实际输出为:2019-08-20 12:34:18.721 >
答案 0 :(得分:0)
您可以尝试以下操作,
long eventDate = 1566297258721L;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z", Locale.US);
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
String stringDate = simpleDateFormat.format(new Date(eventDate));
System.out.println(stringDate);
它给了我下面的输出。
2019-08-20 10:34:18 UTC
答案 1 :(得分:0)
我不明白为什么您要创建一个新的DateTime,然后从那里获取毫秒数(如果您已经在开始时有了毫秒数)。 也许我误会了你的问题。毫秒与时区无关。时区用于比较2个不同位置的同一时刻并获取相应的日期。这是我的解决方案
long eventDate = 1566297258721L;
Timestamp time=new Timestamp(eventDate);
System.out.println(time);
结果将是2019-08-20 10:34:18.721
,也是所需的SQL格式
您将获得当前时区中的时刻,并将其转换为其他时区以查看例如什么时候在另一个国家
long eventDate = 1566297258721L;
Calendar calendar = Calendar.getInstance();
calendar.setTime(eventDate);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
dateFormat.format(calendar.getTime());
我希望这些摘要可能有用。编程愉快!
答案 2 :(得分:0)
您可以使用Java 8及更高版本的 java.time软件包:
ZonedDateTime zonedDateTime = Instant.ofEpochMilli(1566817891743L).atZone(ZoneOffset.UTC);