⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datetime.java

📁 java 数据库 功能强大 效率高 SmallSQL Database is a free DBMS library for the Java(tm) platform. It runs on
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
				formatNumber( details.year % 100, 2, buf);
				return buf.toString();
			case 104: // german dd.mm.yyyy
				formatNumber( details.day, 2, buf);
				buf.append('.');
				formatNumber( details.month+1, 2, buf);
				buf.append('.');
				formatNumber( details.year, 4, buf);
				return buf.toString();
			case 5: // italiano dd-mm-yy
				formatNumber( details.day, 2, buf);
				buf.append('-');
				formatNumber( details.month+1, 2, buf);
				buf.append('-');
				formatNumber( details.year % 100, 2, buf);
				return buf.toString();
			case 105: // italiano dd-mm-yyyy
				formatNumber( details.day, 2, buf);
				buf.append('-');
				formatNumber( details.month+1, 2, buf);
				buf.append('-');
				formatNumber( details.year, 4, buf);
				return buf.toString();
			case 6: // dd mon yy
				formatNumber( details.day, 2, buf);
				buf.append(' ');
				buf.append( SHORT_MONTHS[ details.month ]);
				buf.append(' ');
				formatNumber( details.year % 100, 2, buf);
				return buf.toString();
			case 106: // dd mon yyyy
				formatNumber( details.day, 2, buf);
				buf.append(' ');
				buf.append( SHORT_MONTHS[ details.month ]);
				buf.append(' ');
				formatNumber( details.year, 4, buf);
				return buf.toString();
			case 7: // Mon dd, yy
				buf.append( SHORT_MONTHS[ details.month ]);
				buf.append(' ');
				formatNumber( details.day, 2, buf);
				buf.append(',');
				buf.append(' ');
				formatNumber( details.year % 100, 2, buf);
				return buf.toString();
			case 107: // Mon dd, yyyy
				buf.append( SHORT_MONTHS[ details.month ]);
				buf.append(' ');
				formatNumber( details.day, 2, buf);
				buf.append(',');
				buf.append(' ');
				formatNumber( details.year, 4, buf);
				return buf.toString();
			case 8: //hh:mm:ss
			case 108:
				formatNumber( details.hour, 2, buf);
				buf.append(':');
				formatNumber( details.minute, 2, buf);
				buf.append(':');
				formatNumber( details.second, 2, buf);
				return buf.toString();
			case 9:
			case 109: // mon dd yyyy hh:mi:ss:mmmAM (oder PM)
				buf.append( SHORT_MONTHS[ details.month ]);
				buf.append(' ');
				formatNumber( details.day, 2, buf);
				buf.append(' ');
				formatNumber( details.year, 4, buf);
				buf.append(' ');
				formatHour12( details.hour, buf );
				buf.append(':');
				formatNumber( details.minute, 2, buf);
				buf.append(':');
				formatNumber( details.second, 2, buf);
				buf.append(':');
				formatMillis( details.millis, buf);
				buf.append( details.hour < 12 ? "AM" : "PM" );
				return buf.toString();
			case 10: // USA mm-dd-yy
				formatNumber( details.month+1, 2, buf);
				buf.append('-');
				formatNumber( details.day, 2, buf);
				buf.append('-');
				formatNumber( details.year % 100, 2, buf);
				return buf.toString();
			case 110: // USA mm-dd-yyyy
				formatNumber( details.month+1, 2, buf);
				buf.append('-');
				formatNumber( details.day, 2, buf);
				buf.append('-');
				formatNumber( details.year, 4, buf);
				return buf.toString();
			case 11: // Japan yy/mm/dd
				formatNumber( details.year % 100, 2, buf);
				buf.append('/');
				formatNumber( details.month+1, 2, buf);
				buf.append('/');
				formatNumber( details.day, 2, buf);
				return buf.toString();
			case 111: // Japan yy/mm/dd
				formatNumber( details.year, 4, buf);
				buf.append('/');
				formatNumber( details.month+1, 2, buf);
				buf.append('/');
				formatNumber( details.day, 2, buf);
				return buf.toString();
			case 12: // ISO yymmdd
				formatNumber( details.year % 100, 2, buf);
				formatNumber( details.month+1, 2, buf);
				formatNumber( details.day, 2, buf);
				return buf.toString();
			case 112: // ISO yyyymmdd
				formatNumber( details.year, 4, buf);
				formatNumber( details.month+1, 2, buf);
				formatNumber( details.day, 2, buf);
				return buf.toString();
			case 13:
			case 113: // default + millis;  dd mon yyyy hh:mm:ss:mmm(24h)
				formatNumber( details.day, 2, buf);
				buf.append(' ');
				buf.append( SHORT_MONTHS[ details.month ]);
				buf.append(' ');
				formatNumber( details.year, 4, buf);
				buf.append(' ');
				formatNumber( details.hour, 2, buf );
				buf.append(':');
				formatNumber( details.minute, 2, buf);
				buf.append(':');
				formatNumber( details.second, 2, buf);
				buf.append(':');
				formatMillis( details.millis, buf);
				return buf.toString();
			case 14:
			case 114: // hh:mi:ss:mmm(24h)
				formatNumber( details.hour, 2, buf);
				buf.append(':');
				formatNumber( details.minute, 2, buf);
				buf.append(':');
				formatNumber( details.second, 2, buf);
				buf.append(':');
				formatMillis( details.millis, buf );
				return buf.toString();
			case 20:
			case 120: // ODBC kannonish; yyyy-mm-dd hh:mi:ss(24h)
				formatNumber( details.year, 4, buf);
				buf.append('-');
				formatNumber( details.month+1, 2, buf);
				buf.append('-');
				formatNumber( details.day, 2, buf);
				buf.append(' ');
				formatNumber( details.hour, 2, buf);
				buf.append(':');
				formatNumber( details.minute, 2, buf);
				buf.append(':');
				formatNumber( details.second, 2, buf);
				return buf.toString();
			case 21:
			case 121: // ODBC kannonish + millis; yyyy-mm-dd hh:mi:ss.mmm(24h)
				formatNumber( details.year, 4, buf);
				buf.append('-');
				formatNumber( details.month+1, 2, buf);
				buf.append('-');
				formatNumber( details.day, 2, buf);
				buf.append(' ');
				formatNumber( details.hour, 2, buf);
				buf.append(':');
				formatNumber( details.minute, 2, buf);
				buf.append(':');
				formatNumber( details.second, 2, buf);
				buf.append('.');
				formatMillis( details.millis, buf );
				return buf.toString();
			case 26:
			case 126: // ISO8601; yyyy-mm-ddThh:mi:ss.mmm(24h)
				formatNumber( details.year, 4, buf);
				buf.append('-');
				formatNumber( details.month+1, 2, buf);
				buf.append('-');
				formatNumber( details.day, 2, buf);
				buf.append('T');
				formatNumber( details.hour, 2, buf);
				buf.append(':');
				formatNumber( details.minute, 2, buf);
				buf.append(':');
				formatNumber( details.second, 2, buf);
				buf.append('.');
				formatMillis( details.millis, buf );
				return buf.toString();
			case 130: // Kuwaiti  dd mon yyyy hh:mi:ss:mmmAM
				formatNumber( details.day, 2, buf);
				buf.append(' ');
				buf.append( SHORT_MONTHS[ details.month ]);
				buf.append(' ');
				formatNumber( details.year, 4, buf);
				buf.append(' ');
				formatHour12( details.hour, buf );
				buf.append(':');
				formatNumber( details.minute, 2, buf);
				buf.append(':');
				formatNumber( details.second, 2, buf);
				buf.append(':');
				formatMillis( details.millis, buf);
				buf.append( details.hour < 12 ? "AM" : "PM" );
				return buf.toString();
			case 131: // Kuwaiti  dd/mm/yy hh:mi:ss:mmmAM
				formatNumber( details.day, 2, buf);
				buf.append('/');
				formatNumber( details.month+1, 2, buf);
				buf.append('/');
				formatNumber( details.year % 100, 2, buf);
				buf.append(' ');
				formatNumber( details.hour, 2, buf);
				buf.append(':');
				formatNumber( details.minute, 2, buf);
				buf.append(':');
				formatNumber( details.second, 2, buf);
				buf.append(':');
				formatMillis( details.millis, buf );
				return buf.toString();
			default:
				return toString();
		}
		
	}
	
	
	private final static void formatNumber(int value, int digitCount, StringBuffer buf){
		buf.setLength(buf.length() + digitCount);
		if(value < 0) value = - value;
		for(int i=1; i<=digitCount; i++){
			buf.setCharAt( buf.length()-i, Utils.digits[ value % 10 ] );
			value /= 10;
		}
	}
	

	private final static void formatMillis(int millis,  StringBuffer buf){
		buf.append(Utils.digits[ (millis / 100) % 10 ]);
		int value = millis % 100;
		if(value != 0){
			buf.append(Utils.digits[ value / 10 ]);
			value %= 10;
			if(value != 0)
				buf.append(Utils.digits[ value ]);
		}
	}
	
	
	/**
	 * The hour is print in the range from 1 - 12 
	 */
	private final static void formatHour12(int hour,  StringBuffer buf){
		hour %= 12;
		if(hour == 0) hour = 12;
		formatNumber( hour, 2, buf );
	}
	
	
	private final static long addDateTimeOffset(long datetime){
        return addDateTimeOffset( datetime, TimeZone.getDefault());
	}


    final static long addDateTimeOffset(long datetime, TimeZone timezone){
        int t = (int)(datetime % 86400000);
        int d = (int)(datetime / 86400000);
        if(t<0){
            //Time before 1970 and not a full day
            t += 86400000;
            d--;
        }              
        int millis = t % 1000;
        t /= 1000;
        synchronized(cal){
            cal.setTimeZone( timezone );
            cal.set( 1970, 0, d+1, 0, 0, t );
            cal.set( Calendar.MILLISECOND, millis );
            return cal.getTimeInMillis();
        }
    }


	private static long removeDateTimeOffset(long datetime){
		synchronized(cal){
			cal.setTimeZone( TimeZone.getDefault() );
			cal.setTimeInMillis( datetime );
			return datetime + cal.get( Calendar.ZONE_OFFSET) + cal.get( Calendar.DST_OFFSET);
		}
	}
	
	
	static Timestamp getTimestamp(long time){
		return new Timestamp( DateTime.addDateTimeOffset(time) ); 
	}


	static Time getTime(long time){
		return new Time( DateTime.addDateTimeOffset(time) ); 
	}


	static Date getDate(long time){
		return new Date( DateTime.addDateTimeOffset(time) ); 
	}
    
    
	public Object getImmutableObject(){
		switch(dataType){
			case SQLTokenizer.DATE:
				return getDate( time );
			case SQLTokenizer.TIME:
				return getTime( time );
			default:
				return getTimestamp( time );
		}
	}
	

	static class Details{
		int year;
		int month;
		int dayofyear;
		int day;
		int hour;
		int minute;
		int second;
		int millis;
		
		Details(long time){
			int t = (int)(time % 86400000);
			int d = (int)(time / 86400000);
			if(t<0){
			    //Time before 1970 and not a full day
				t += 86400000;
				d--;
			}				
			millis = t % 1000;
			t /= 1000;
			second = t % 60;
			t /= 60;
			minute = t % 60;
			t /= 60;
			hour = t % 24;

			year = 1970 - (int)(t / 365.2425);
			boolean isLeap;
			do{
				isLeap = false;
				dayofyear = day = d - ((year - 1970)*365 + (year/4) - (year/100) + (year/400) - 477);
				if(year % 4 == 0 && (year%100 != 0 || year%400 == 0)){
					// is leap year
					if(day < 59){
						day++;
						isLeap = true;
					}
					dayofyear++;
				}
				if(day < 0){
					year--;
					continue;
				}else
				if(day >= 365){
					year++;
					continue;
				}
				break;
			}while(true);
			
			if(isLeap && day == 59){
				// 29. Feb
				month = 1;
				day   = 29;
			}else{
				for(int m=11; m>=0; m--){
					if(MONTH_DAYS[m] <= day){
						month = m;
						day   = day - MONTH_DAYS[m] + 1;
						break;
					}
				}
			}
		}
	}

	private static final Calendar cal = Calendar.getInstance();

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -