Java编程软件什么时候出现在中国

关于java获取当前时间出现8小时时差的解决办法_百度知道
关于java获取当前时间出现8小时时差的解决办法
import java.util.D
import java.util.TimeZ
import java.text.SimpleDateF
public class NowString {
public static void main(String[] args) {
SimpleDateFormat df = new SimpleDateFormat(&yyyy-MM-dd HH:mm:ss&);//设置...
调用代码的时候会出现8小时的时间为了保证在不同的服务器上正确是时间 建议设置时区TimeZone timeZoneChina = TimeZone.getTimeZone(&Asia/Shanghai&);&#47用win的系统,本机时间是没有问题的
我有更好的答案
而且我也测试过对的,用C++,oracle获取的时间都是正确的,这个是系统问题,我也碰到过这种问题
采纳率:26%
好像都是这样,我以前也经常这样
检查下你系统机器的时区是否是北京时间。
为您推荐:
其他类似问题
您可能关注的内容
时差的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。博客分类:
import java.text.DateF
import java.text.ParseP
import java.text.SimpleDateF
import java.util.C
import java.util.D
import java.util.GregorianC
public class TimeTest {
//用来全局控制 上一周,本周,下一周的周数变化
int weeks = 0;
private int MaxD//一月最大天数
private int MaxY//一年最大天数
* @param args
public static void main(String[] args) {
TimeTest tt = new TimeTest();
System.out.println("获取当天日期:"+tt.getNowTime("yyyy-MM-dd"));
System.out.println("获取本周一日期:"+tt.getMondayOFWeek());
System.out.println("获取本周日的日期~:"+tt.getCurrentWeekday());
System.out.println("获取上周一日期:"+tt.getPreviousWeekday());
System.out.println("获取上周日日期:"+tt.getPreviousWeekSunday());
System.out.println("获取下周一日期:"+tt.getNextMonday());
System.out.println("获取下周日日期:"+tt.getNextSunday());
System.out.println("获得相应周的周六的日期:"+tt.getNowTime("yyyy-MM-dd"));
System.out.println("获取本月第一天日期:"+tt.getFirstDayOfMonth());
System.out.println("获取本月最后一天日期:"+tt.getDefaultDay());
System.out.println("获取上月第一天日期:"+tt.getPreviousMonthFirst());
System.out.println("获取上月最后一天的日期:"+tt.getPreviousMonthEnd());
System.out.println("获取下月第一天日期:"+tt.getNextMonthFirst());
System.out.println("获取下月最后一天日期:"+tt.getNextMonthEnd());
System.out.println("获取本年的第一天日期:"+tt.getCurrentYearFirst());
System.out.println("获取本年最后一天日期:"+tt.getCurrentYearEnd());
System.out.println("获取去年的第一天日期:"+tt.getPreviousYearFirst());
System.out.println("获取去年的最后一天日期:"+tt.getPreviousYearEnd());
System.out.println("获取明年第一天日期:"+tt.getNextYearFirst());
System.out.println("获取明年最后一天日期:"+tt.getNextYearEnd());
System.out.println("获取本季度第一天到最后一天:"+tt.getThisSeasonTime(11));
System.out.println("获取两个日期之间间隔天数~:"+TimeTest.getTwoDay("",""));
* 得到二个日期间的间隔天数
public static String getTwoDay(String sj1, String sj2) {
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
long day = 0;
java.util.Date date = myFormatter.parse(sj1);
java.util.Date mydate = myFormatter.parse(sj2);
day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
} catch (Exception e) {
return "";
return day + "";
* 根据一个日期,返回是星期几的字符串
* @param sdate
public static String getWeek(String sdate) {
// 再转换为时间
Date date = TimeTest.strToDate(sdate);
Calendar c = Calendar.getInstance();
c.setTime(date);
// int hour=c.get(Calendar.DAY_OF_WEEK);
// hour中存的就是星期几了,其范围 1~7
// 1=星期日 7=星期六,其他类推
return new SimpleDateFormat("EEEE").format(c.getTime());
* 将短时间格式字符串转换为时间 yyyy-MM-dd
* @param strDate
public static Date strToDate(String strDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(strDate, pos);
* 两个时间之间的天数
* @param date1
* @param date2
public static long getDays(String date1, String date2) {
if (date1 == null || date1.equals(""))
if (date2 == null || date2.equals(""))
// 转换为标准时间
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date =
java.util.Date mydate =
date = myFormatter.parse(date1);
mydate = myFormatter.parse(date2);
} catch (Exception e) {
long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
// 计算当月最后一天,返回字符串
public String getDefaultDay(){
String str = "";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE,1);//设为当前月的1号
lastDate.add(Calendar.MONTH,1);//加一个月,变为下月的1号
lastDate.add(Calendar.DATE,-1);//减去一天,变为当月最后一天
str=sdf.format(lastDate.getTime());
// 上月第一天
public String getPreviousMonthFirst(){
String str = "";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE,1);//设为当前月的1号
lastDate.add(Calendar.MONTH,-1);//减一个月,变为下月的1号
//lastDate.add(Calendar.DATE,-1);//减去一天,变为当月最后一天
str=sdf.format(lastDate.getTime());
//获取当月第一天
public String getFirstDayOfMonth(){
String str = "";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE,1);//设为当前月的1号
str=sdf.format(lastDate.getTime());
// 获得本周星期日的日期
public String getCurrentWeekday() {
weeks = 0;
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus+6);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preM
//获取当天时间
public String getNowTime(String dateformat){
SimpleDateFormat
dateFormat
SimpleDateFormat(dateformat);//可以方便地修改日期格式
= dateFormat.format(now);
// 获得当前日期与本周日相差的天数
private int getMondayPlus() {
Calendar cd = Calendar.getInstance();
// 获得今天是一周的第几天,星期日是第一天,星期二是第二天......
int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK)-1;
//因为按中国礼拜一作为第一天所以这里减1
if (dayOfWeek == 1) {
return 1 - dayOfW
//获得本周一的日期
public String getMondayOFWeek(){
weeks = 0;
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preM
//获得相应周的周六的日期
public String getSaturday() {
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks + 6);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preM
// 获得上周星期日的日期
public String getPreviousWeekSunday() {
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus+weeks);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preM
// 获得上周星期一的日期
public String getPreviousWeekday() {
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preM
// 获得下周星期一的日期
public String getNextMonday() {
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 7);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preM
// 获得下周星期日的日期
public String getNextSunday() {
int mondayPlus = this.getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 7+6);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preM
private int getMonthPlus(){
Calendar cd = Calendar.getInstance();
int monthOfNumber = cd.get(Calendar.DAY_OF_MONTH);
cd.set(Calendar.DATE, 1);//把日期设置为当月第一天
cd.roll(Calendar.DATE, -1);//日期回滚一天,也就是最后一天
MaxDate=cd.get(Calendar.DATE);
if(monthOfNumber == 1){
return -MaxD
return 1-monthOfN
//获得上月最后一天的日期
public String getPreviousMonthEnd(){
String str = "";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.add(Calendar.MONTH,-1);//减一个月
lastDate.set(Calendar.DATE, 1);//把日期设置为当月第一天
lastDate.roll(Calendar.DATE, -1);//日期回滚一天,也就是本月最后一天
str=sdf.format(lastDate.getTime());
//获得下个月第一天的日期
public String getNextMonthFirst(){
String str = "";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.add(Calendar.MONTH,1);//减一个月
lastDate.set(Calendar.DATE, 1);//把日期设置为当月第一天
str=sdf.format(lastDate.getTime());
//获得下个月最后一天的日期
public String getNextMonthEnd(){
String str = "";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.add(Calendar.MONTH,1);//加一个月
lastDate.set(Calendar.DATE, 1);//把日期设置为当月第一天
lastDate.roll(Calendar.DATE, -1);//日期回滚一天,也就是本月最后一天
str=sdf.format(lastDate.getTime());
//获得明年最后一天的日期
public String getNextYearEnd(){
String str = "";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.add(Calendar.YEAR,1);//加一个年
lastDate.set(Calendar.DAY_OF_YEAR, 1);
lastDate.roll(Calendar.DAY_OF_YEAR, -1);
str=sdf.format(lastDate.getTime());
//获得明年第一天的日期
public String getNextYearFirst(){
String str = "";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.add(Calendar.YEAR,1);//加一个年
lastDate.set(Calendar.DAY_OF_YEAR, 1);
str=sdf.format(lastDate.getTime());
//获得本年有多少天
private int getMaxYear(){
Calendar cd = Calendar.getInstance();
cd.set(Calendar.DAY_OF_YEAR,1);//把日期设为当年第一天
cd.roll(Calendar.DAY_OF_YEAR,-1);//把日期回滚一天。
int MaxYear = cd.get(Calendar.DAY_OF_YEAR);
return MaxY
private int getYearPlus(){
Calendar cd = Calendar.getInstance();
int yearOfNumber = cd.get(Calendar.DAY_OF_YEAR);//获得当天是一年中的第几天
cd.set(Calendar.DAY_OF_YEAR,1);//把日期设为当年第一天
cd.roll(Calendar.DAY_OF_YEAR,-1);//把日期回滚一天。
int MaxYear = cd.get(Calendar.DAY_OF_YEAR);
if(yearOfNumber == 1){
return -MaxY
return 1-yearOfN
//获得本年第一天的日期
public String getCurrentYearFirst(){
int yearPlus = this.getYearPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE,yearPlus);
Date yearDay = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preYearDay = df.format(yearDay);
return preYearD
//获得本年最后一天的日期 *
public String getCurrentYearEnd(){
Date date = new Date();
SimpleDateFormat
dateFormat
SimpleDateFormat("yyyy");//可以方便地修改日期格式
= dateFormat.format(date);
return years+"-12-31";
//获得上年第一天的日期 *
public String getPreviousYearFirst(){
Date date = new Date();
SimpleDateFormat
dateFormat
SimpleDateFormat("yyyy");//可以方便地修改日期格式
= dateFormat.format(date); int years_value = Integer.parseInt(years);
years_value--;
return years_value+"-1-1";
//获得上年最后一天的日期
public String getPreviousYearEnd(){
int yearPlus = this.getYearPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE,yearPlus+MaxYear*weeks+(MaxYear-1));
Date yearDay = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preYearDay = df.format(yearDay);
getThisSeasonTime(11);
return preYearD
//获得本季度
public String getThisSeasonTime(int month){
int array[][] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
int season = 1;
if(month&=1&&month&=3){
season = 1;
if(month&=4&&month&=6){
season = 2;
if(month&=7&&month&=9){
season = 3;
if(month&=10&&month&=12){
season = 4;
int start_month = array[season-1][0];
int end_month = array[season-1][2];
Date date = new Date();
SimpleDateFormat
dateFormat
SimpleDateFormat("yyyy");//可以方便地修改日期格式
= dateFormat.format(date);
int years_value = Integer.parseInt(years);
int start_days =1;//years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month);
int end_days = getLastDayOfMonth(years_value,end_month);
String seasonDate = years_value+"-"+start_month+"-"+start_days+";"+years_value+"-"+end_month+"-"+end_
return seasonD
* 获取某年某月的最后一天
* @param year 年
* @param month 月
* @return 最后一天
private int getLastDayOfMonth(int year, int month) {
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8
|| month == 10 || month == 12) {
return 31;
if (month == 4 || month == 6 || month == 9 || month == 11) {
return 30;
if (month == 2) {
if (isLeapYear(year)) {
return 29;
return 28;
* 是否闰年
* @param year 年
public boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
时间对比:
//将一个日期字符串转化成日期
public static Date switchStringToDate(String sDate){
Date date=
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
date=df.parse(sDate);
}catch(Exception e){
System.out.println("日期转换失败:"+e.getMessage());
* 比较时间大小
* @param s1
* @param s2
public static boolean compare(String s1,String s2){
Date dateFrom = switchStringToDate(s1);
Date dateTo = switchStringToDate(s2);
if(dateFrom.before(dateTo)){
date日期向前推n天的日期:
public static String validDate(String date,int n) throws ParseException{
Calendar c = Calendar.getInstance();
String currdateTime[] = date.split("-");
c.set(Integer.parseInt(currdateTime[0]), Integer.parseInt(currdateTime[1])-1, Integer.parseInt(currdateTime[2]));
c.add(c.DATE,-n);
return ""+c.get(c.YEAR)+"-"+(c.get(c.MONTH)+1)+"-"+c.get(c.DATE);
&&& * 两个时间之间的天数
&&& * @param date1
&&& * @param date2
&&& * @return
public static int getDays(String date1, String date2) {
if (date1 == null || date1.equals(""))
if (date2 == null || date2.equals(""))
// 转换为标准时间
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date =
java.util.Date mydate =
date = myFormatter.parse(date1);
mydate = myFormatter.parse(date2);
} catch (Exception e) {
int day = (int) ((date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000));
浏览: 274136 次
来自: 北京
多谢博主分享
图片看不成
正在学习中,看完文章了,谢谢写的教程!!!
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)博客分类:
话说在中国日午夜发生了一件神奇的事情,中国时间瞬间增加了5分52秒,
不管你信不信,反正我信了!不信你看下边代码!
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.
See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
package com.opencfg.
import java.text.ParseE
import java.text.SimpleDateF
import java.util.D
* Java Date Test
* @author opencfg.com
* @since 0.0.1-SNAPSHOT
* @version 0.0.1-SNAPSHOT
public class JavaDateTest {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date1 = sf.parse(" 23:54:06");
Date date2 = sf.parse(" 23:54:07");
Date date3 = sf.parse(" 23:54:08");
Date date4 = sf.parse(" 23:54:09");
System.out.println(date2.getTime() - date1.getTime());
System.out.println(date3.getTime() - date2.getTime());
System.out.println(date4.getTime() - date3.getTime());
输入结果是:
5分52秒 = 5 * 60 + 53 = 352
,在加上本来就多的1秒,结果是多了353秒
java傻了吗?硬件有问题吗?都错
是政治问题,不信你看这里:
历史确实有记载,简单地说,在1927年末的最后那一个午夜,时钟被往回拨了5分52秒。所以“ 23:54:08”这一秒,事实上,发生了两次,而看起来在计算当地时间时,Java将其视为了后面那一个时间点,于是就产生了这一差别。
下边是摘抄一iteye哥们的:
时间区域和JAVA
涉及有关时间区域信息时Java和Solaris很相似。每个时间区域都有一个时间区域ID标识符。在J2SE 1.3 and 1.4中,这个ID是个字符串,是由位于J2SE 安装程序的jre/lib子目录中的tzmappings文件这些ID列表。 J2SE 1.3 仅仅只包含tzmappings文件,但是 J2SE 1.4包含世界不同地区的时间区域数据文件。jre/lib/zi存放着这些文件。在J2SE 1.4里,sun.util.calendar.ZoneInfo从这些文件获取DST规则。在Solaris中, 这些时间区域数据文件是以二进制形式存放的,不是文本文件,因此你不能看它们。 在J2SE 1.4中的时间区域数据文件和在Solaris中是不同的。
java.util.TimeZone类中getDefault方法的源代码显示,它最终是会调用sun.util.calendar.ZoneInfo类的getTimeZone 方法。这个方法为需要的时间区域返回一个作为ID的String参数。这个默认的时间区域ID是从 user.timezone (system)属性那里得到。如果user.timezone没有定义,它就会尝试从user.country和java.home (System)属性来得到ID。 如果它没有成功找到一个时间区域ID,它就会使用一个"fallback" 的GMT值。换句话说, 如果它没有计算出你的时间区域ID,它将使用GMT作为你默认的时间区域。 注意,System属性是在java.lang.System类的initProperties方法中被初始化的。这是一个本地方法。因此源代码是不可用的----除非你深入到J2SE分发包中的本地代码库中去研究。然而,在Windows系统中,System 属性是从Windows注册表中被初始化的,而在Linux/Unix中是由环境变量来进行初始化。initProperties方法的Javadoc声明,某些属性"必须保证被定义" 且列出它们。被java.util.TimeZone类的getDefault方法使用的三个System属性中,只有java.home作为一种“保证的”属性在Javadoc中被列出。 推荐的解决方案
因此,你如何确保JAVA能给你正确的时间和日期呢?最好的办法是确认JAVA虚拟机(JVM)的默认TimeZone类是正确的,且是适合你的地理范围(Locale)的。你如何来确保默认TimeZone是正确的且适合的呢?这又是一个新问题了。象大多数处理的问题一样,这个也有许多解决方案。根据java.util.TimeZone.getDefault方法的源代码来看,最好的办法是正确地设置user.timezone属性。在启动JAVA虚拟机时,你能很容易的通过使用 -D 命令 -line 参数的办法来覆盖(override)在java.lang.System.initProperties方法中所设置的值。例如:
java -Duser.timezone=Asia/Shanghai DateTest
这个命令启动DateTest类,并设置 user.timezone属性到Asia/Shanghai。你也能够通过使用java.lang.System 类的setProperty方法来设置user.timezone 属性:
System.setProperty("user.timezone","Asia/Shanghai");
如果没有一个可用的时间区域ID适合你,那么就你可以创建一个自定义TimeZone 使用java.util.TimeZone 类的 setDefault 方法将它设置为默认的时间区域----就象我先前在ItsInitializer 类中所做的操作一样。 记住,在J2SE中,大多数日期和时间相关的类都包含时间区域信息,包括那些格式类,如java.text.DateFormat, 因此它们都会被JVM的默认时间区域所影响。然而,在你创建这些类的实例时,你能为它们确保正确的时间区域信息,使得你可以更容易来设置整个JVM的默认时间区域。并且一旦设置好,就可以确保所有的这些类都将使用同一个默认的时间区域。
看到最后你是否发现,中国时间都信不过了,悲催哇,洗洗看电影睡吧!CCTV的报时也不一定是准的哇,靠人不如靠自己, 于是 就产生了 我靠!
浏览: 285510 次
来自: 深圳
进制转换之后,根本不会执行js代码,感觉你没有测试过吧
如何使用过滤器来处理呢?
我艹,我那天这么写,包括一些方法,然后那货说这样写不容易看懂。 ...
奢华的JVM介绍!
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'847被浏览52,935分享邀请回答18759 条评论分享收藏感谢收起5323 条评论分享收藏感谢收起

我要回帖

更多关于 java编程软件 的文章

 

随机推荐