📄 datetime.java
字号:
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 + -