关于java获取当前时间出现8小时时差的解决办法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于java获取当前时间出现8小时时差的解决办法相关的知识,希望对你有一定的参考价值。

import java.util.Date;
import java.util.TimeZone;
import java.text.SimpleDateFormat;

public class NowString
public static void main(String[] args)
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
System.out.println(df.format(new Date()));// new Date()为获取当前系统时间

Date utilDate = new java.util.Date();

SimpleDateFormat myFmt = new SimpleDateFormat("yyyy-MM-dd");
TimeZone timeZoneChina = TimeZone.getTimeZone("Asia/Shanghai");//获取中国的时区
myFmt.setTimeZone(timeZoneChina);//设置系统时区

System.out.println( myFmt.format(utilDate));



用win的系统,本机时间是没有问题的,调用代码的时候会出现8小时的时间
为了保证在不同的服务器上正确是时间 建议设置时区
TimeZone timeZoneChina = TimeZone.getTimeZone("Asia/Shanghai");//获取中国的时区

对的,我也碰到过这种问题,这个是系统问题,而且我也测试过,用C++,oracle获取的时间都是正确的,就是java的JDK获取的时间少了8小时。
其实最简单的方法就是在获取的时间上自己加个8小时就可以了~~
参考技术A 好像都是这样,我以前也经常这样 参考技术B 检查下你系统机器的时区是否是北京时间。

如何从 NSDate 获得 1 小时的未来时差 [重复]

【中文标题】如何从 NSDate 获得 1 小时的未来时差 [重复]【英文标题】:How to get future time difference of 1 hour from NSDate [duplicate] 【发布时间】:2015-04-05 14:58:36 【问题描述】:

我想为用户启用一项功能,使其仅在当前时间 1 小时后执行一项功能。我究竟应该在下面的代码中传递toDate 参数以获取与当前时间的 1 小时未来时差?我不知道如何在NSDateFormatterNSDateComponents 中设置未来时间。所以无法写出我尝试过的内容。

- (NSInteger)timeDifference:(NSDate *)fromDate ToDate:(NSDate *)toDate


    NSLog(@" FromDate: %@, ToDate: %@",fromDate,toDate);

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *differenceValue = [calendar components:NSHourCalendarUnit
                                                    fromDate:fromDate toDate:toDate options:0];
    NSLog(@"Calculated hour difference : %d",[differenceValue hour]);
    NSInteger hourDifference = [differenceValue hour];

    NSLog(@" HourDifference: %d",hourDifference);
    return hourDifference;

【问题讨论】:

【参考方案1】:

如果要创建比特定日期晚一小时的日期,可以使用dateByAddingTimeInterval 方法,例如:

NSDate *date = [NSDate date];
NSDate *plusOneHour = [date dateByAddingTimeInterval:60.0f * 60.0f];

NSLog(@"%@, %@", date, plusOneHour);

更新

正如@uchuugaka 所说,您可以使用日历方法here 找到版本。

【讨论】:

这是一种幼稚且不正确的做法,会导致错误。 @uchuugaka 我从来没有听说过这种方法不能正常工作,但你可能是对的。 它会在很长一段时间内工作,但 NSDate 是时间间隔的薄包装,不知道日历和时区的人为部分。从某种意义上说是正确的。但实际上,它忽略了所有与此相关的疯狂事情,即立法任意的极端案例。 @uchuugaka 你是对的,我找到了一个较旧的答案,它有正确的日历方法来解决这个问题,我用一个链接更新了我的答案。【参考方案2】:

查看 NSCalendar 标头以获取方便的方法。另请观看 2013 年关于日历计算主题的 WWDC 视频。 这些东西进入文档的速度真的很慢,简单地添加时间间隔是很多次错误。所有组件对于做到这一点都很重要。您需要有一个日历和一个时区才能增加具有语义意义的小时数。

在处理各地不同的午夜、闰年和夏令时时,这是一个陷阱。

特别是在这种情况下,我会从 NSCalendar.h 推荐这个

/*
    This API returns a new NSDate object representing the date calculated by adding an amount of a specific component to a given date.
    The NSCalendarWrapComponents option specifies if the component should be incremented and wrap around to zero/one on overflow, and should not cause higher units to be incremented.
*/
- (NSDate *)dateByAddingUnit:(NSCalendarUnit)unit value:(NSInteger)value toDate:(NSDate *)date options:(NSCalendarOptions)options NS_AVAILABLE(10_9, 8_0);

但该标头中有几种方法就足够了。请仔细观看 WWDC 视频几次。非常值得您花时间,您的用户体验会更好。

【讨论】:

以上是关于关于java获取当前时间出现8小时时差的解决办法的主要内容,如果未能解决你的问题,请参考以下文章

PHP date("Y-m-d H:i:s");获取当前时间 差8小时解决办法

解决MongoDB存储时间时差的问题

JDBC时间有12小时时差问题

怎么实时同步java虚拟机与操作系统时区 及JVM启动后再更改操作系统时区或时间也能保持其同步? new date() 时差8个小时的解决方案

PHP date("Y-m-d H:i:s");获取当前时间 差8小时解决办法

如何从 NSDate 获得 1 小时的未来时差 [重复]