关于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");//获取中国的时区
其实最简单的方法就是在获取的时间上自己加个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 小时未来时差?我不知道如何在NSDateFormatter
或NSDateComponents
中设置未来时间。所以无法写出我尝试过的内容。
- (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小时解决办法
怎么实时同步java虚拟机与操作系统时区 及JVM启动后再更改操作系统时区或时间也能保持其同步? new date() 时差8个小时的解决方案