2010년 4월 25일 일요일
Java inputStream <-> String
inputStream -> String
StringBuffer out = new StringBuffer();
byte[] b = new byte[4096];
for (int n; (n = inputStream.read(b)) != -1;) {
out.append(new String(b, 0, n));
}
out.toString();
-------------------------------------------------
String -> inputStream
InputStream bai = new ByteArrayInputStream(out.toString().getBytes("UTF-8"));
2010년 1월 18일 월요일
확장자만 가져오기
String ext="";
int i=fileName.lastIndexOf('.');
if(i>0 && i <fileName.length()-1)
{
ext=fileName.substring(i+1).toLowerCase();
}
2010년 1월 15일 금요일
숫자만를 전화번호형식(000-0000-0000)으로 표현
/**
* 숫자만 으로 이루어져 있는 전화번호를 형식을
* 000-0000-0000 으로 표현하기 위해 만듬
* 예) 027651111 => 02 - 765 - 1111
*/
private String change(String text)
{
int textLength = text.length();
String textOut ="";
if(textLength>=9)
{
int startIndex=0;
if("02".equals(text.substring(0,2)))
{
textOut+="02";
startIndex+=2;
}
else
{
textOut+=text.substring(0,3);
startIndex+=3;
}
textOut+=" - "+text.substring(startIndex,textLength-4);
textOut+=" - "+text.substring(textLength-4,textLength);
}
return textOut;
}
2009년 8월 7일 금요일
CLOB ....정리... 각 WAS 별
이놈에 CLOB라는게...
어떻게 WAS별로 설정이 조금씩 틀리군요..
정확히는..WAS별로 틀린게 아니라..WAS별로 datasource 설정이
틀려서 그런듯한데...
할때마다 CLOB 검색법 찾아서 하기도 지쳤습니다.
한번 정리 해봤습니다..
(중복이면 난감;; 개인적인 백업 목적도 있으니 중복이라도 야단치지 마세요;;)
import java.sql.Clob;
import weblogic.jdbc.common.OracleClob;
import oracle.jdbc.driver.OracleResultSet;
import oracle.sql.CLOB;
import org.apache.commons.dbcp.DelegatingResultSet;
String query1 = "select content from "+table+" where no="+ no + " for update";
con = getConnection();
con.setAutoCommit(false);//꼭 setAutoCommit을 false로 지정
pstmt = con.prepareStatement(query1);
rs = pstmt.executeQuery();
while (rs.next()){
/**********************************************
* Tomcat
* ********************************************/
Clob clob = rs.getClob(1);
Writer writer = ((CLOB)clob).getCharacterOutputStream();
Reader src = new CharArrayReader(contentData.toCharArray());
char[] buffer = new char[1024];
int read = 0;
while ( (read = src.read(buffer,0,1024)) != -1)
{
writer.write(buffer, 0, read); // write clob.
}
src.close();
writer.close();
/**********************************************
* weblogic
* ********************************************/
Clob clob = rs.getClob(1);
Writer writer = ((OracleClob)clob).getCharacterOutputStream();
Reader src = new CharArrayReader(contentData.toCharArray());
char[] buffer = new char[1024];
int read = 0;
while ( (read = src.read(buffer,0,1024)) != -1)
{
writer.write(buffer, 0, read); // write clob.
}
src.close();
writer.close();
/**********************************************
* sunone
* ********************************************/
Clob clob = rs.getClob(1);
Writer characterStream = clob.setCharacterStream(0);
characterStream.write(contentData);
characterStream.close();
/**********************************************
* interstage
* ********************************************/
CLOB clob = ((OracleResultSet)((DelegatingResultSet)rs).getDelegate()).getCLOB(1);
BufferedWriter writer = new BufferedWriter(clob.getCharacterOutputStream());
writer.write(form.getContent());
writer.close();
}
con.commit();
con.setAutoCommit(true);
http://okjsp.pe.kr/seq/98774 <== 에서 가져온 자료
JDBC Code Templates
JDBC Code Templates
1. Connection
*. To open a connection using thin driver :
DriverManager.getConnection("jdbc:oracle:thin:@<mc-name>:<port-no>:<sid>",
"scott", "tiger");
OR
DriverManager.getConnection("jdbc:oracle:thin:@(description=(address=(host=<mc-name>)(protocol=tcp)(port=<port-no>))(connect_data=(sid=<sid>)))",
"scott","tiger");
*. To open a connection using OCI driver.
To use the default connection.
DriverManager.getConnection("jdbc:oracle:oci8:@", "scott","tiger");
Or
DriverManager.getConnection("jdbc:oracle:oci8:@(description=(address=(host=<mc-name>)(protocol=tcp)(port=<port-no>))(connect_data=(sid=<sid>)))",
"scott","tiger");
Or
DriverManager.getConnection("jdbc:oracle:oci8:@<tns-name>", "scott","tiger");
*. Closing a connection.
conn.close();
*. To set auto commit on.
conn.setAutoCommit(true)
*. To set the batch size to 100
((OracleConnection)conn).setDefaultExecuteBatch (100);
2. Statements
*. To create a statement
Statement stmt = conn.createStatement();
*. To create a prepared Statement
PreparedStatement pstmt =
conn.prepareStatement ("insert into EMP (EMPNO, ENAME) values (?, ?)");
*. To Create a callable statement.
CallableStatement procnone = conn.prepareCall ("begin procnone; end;"
*. To execute a SQL that returns a QUERY
ResultSet rset = stmt.executeQuery ("select ENAME from EMP");
*. To execute a DML that returns the no of rows affected
PreparedStatement pstmt =
conn.prepareStatement ("insert into EMP (EMPNO, ENAME) values (123, 'John')");
int rows = pstmt.executeUpdate ();
Ps. execute and executeQuery can also be called on a PreparedStatement.
They return a boolean and resultSet respectively.
PreparedStatement pstmt =
conn.prepareStatement ("select ENAME from EMP where EMPNO = ?");
pstmt.setInt(1,123);
ResultSet rset = pstmt.executeQuery();
*. To execute a DDL.
boolean status = stmt.execute("create table temp(col1 int)");
*. To Bind an IN variable.
PreparedStatement pstmt =
conn.prepareStatement ("select ENAME from EMP where EMPNO = ?");
pstmt.setInt(1,123);
ResultSet rset = pstmt.executeQuery();
* To Bind an OUT variable
CallableStatement funcin = conn.prepareCall ("begin ? := funcout (?); end;");
funcout.registerOutParameter (1, Types.CHAR);
funcout.registerOutParameter (2, Types.CHAR);
Where funcout is,
create or replace function funcout (y out char)
return char is
begin
y := 'tested';
return 'returned';
end;
* To set the batch size to 100
((OracleStatement)stmt).setRowPrefetch (100);
* To explicitly send the row to the server in batch mode.
int rows = ((OracleStatement)stmt).sendBatch();
3. ResultSets
* Fetch the next row
rset.next();
* Retrieve data from column i based on column no
rset.getInt(i);
* Based on Column Name
rset.getInt("EMPNO");
* Close the resultset
rset.close();
4. Streams: Long columns in JDBC are streamed.
* To set a long (Stream) column
pstmt.setAsciiStream (1, <input-stream>, <input-stream-length>);
If the string data is in Unicode format, then use setUnicodeStream.
pstmt.setUnicodeStream (1, <input-stream>, <input-stream-length>);
For long raw columns, use setBinaryStream
pstmt.setBinaryStream (1, <input-stream>, <input-stream-length>);
create table streamexample (data long)
PreparedStatement pstmt =
conn.prepareStatement ("insert into streamexample values (?)");
InputStream is = new FileInputStream ("notes.txt");
File file = new File ("notes.txt");
pstmt.setAsciiStream (1, is, (int)file.length ());
* To retrieve a long column
ResultSet rset =
stmt.executeQuery ("select * from streamexample");
InputStream ascii_data = rset.getAsciiStream (1);
// Loop, reading from the gif stream and writing to the file
int c;
while ((c = ascii_data.read ()) != -1)
Systemm.out.print(c);
5. Objects
* How to create a STRUCT type descriptor
StructDescriptor type_descriptor =
StructDescriptor.createDescriptor (<type name>, connection);
* How to create a STRUCT object
Object[] attributes = { ... };
STRUCT obj = new STRUCT (<type descriptor>, connection, attributes };
* How to create a SQL to Java type map entry.
map.put (<SQL Type Name>, <Java class which implements SQLData interface>);
* How to retrieve a STRUCT column.
1. As a SQLData object.
For example, to map SQL type "PERSON" to Java class "PersonObj.java"
which implements oracle.jdbc2.SQLData interface:
java.util.Dictionary map = new Hashtable (10);
map.put ("PERSON", Class.forName ("PersonObj"));
PersonObj obj = (PersonObj) rset.getObject (1, map);
2. As a CustomDatum object
CustomDatum obj = rset.getCustomDatum (1, <CustomDatum factory>);
3. As a oracle.sql.STRUCT object
STRUCT obj = (STRUCT) rset.getObject (1);
* How to retrieve STRUCT attributes.
1. With Connection default type map.
STRUCT struct = ...
Object[] attributes = struct.getAttributes ();
2. With the requested type map.
java.util.Dictionary map = ...
STRUCT struct = ...
Object[] attributes = struct.getAttributes (map);
3. Without map, return as oracle Datums.
Datum[] attributes = struct.getOracleAttributes ();
* How to create a ARRAY type descriptor
ArrayDescriptor type_descriptor =
ArrayDescriptor.createDescriptor (<type name>, connection);
* How to create a ARRAY object
Object[] elements = { ... };
ARRAY obj = new ARRAY (<type descriptor>, connection, elements };
* How to retrieve a ARRAY column.
ARRAY obj = ((OracleResultSet) rset).getARRAY (1);
* How to retrieve ARRAY elements.
ARRAY array = (ARRAY) rset.getObject (1);
Object[] elements = array.getArray ();
or
Object[] elements = array.getArray (<type map for elements>);
or
Object[] elements = array.getArray (<begin index>, <count>);
or
Object[] elements = array.getArray (<begin index>, <count>, <type map>);
* How to retrieve ARRAY elements as a ResultSet which holding the elements.
ARRAY array = (ARRAY) rset.getObject (1);
ResultSet array_rset = array.getResultSet ();
or
ResultSet array_rset = array.getResultSet (<type map for elements>);
or
ResultSet array_rset = array.getResultSet (<begin index>, <count>);
or
ResultSet array_rset = array.getResultSet (<begin index>, <count>, <type map>);
* How to retrieve a REF column.
REF obj = ((OracleResultSet) rset).getREF (1);
* To access the value which a REF points to.
REF ref = ((OracleResultSet)rset).getREF (1);
Object value = ref.getValue (); // use connection default map
or
REF ref = ((OracleResultSet) rset).getREF (1);
Object value = ref.getValue (<type map>); // use specified map
* To change the value which a REF points to.
REF ref = ((OracleResultSet) rset).getREF (1);
Object newValue = ...;
ref.setValue (newValue);
6. LOBS
* To read a piece of a LOB.
BLOB blob = ((OracleResultSet) rset).getBLOB (1);
byte[] bytes = blob.getBytes (<begin index>, <length>);
CLOB clob = ((OracleResultSet) rset).getCLOB (2);
String str = clob.getSubString (<begin index>, <length>);
BFILE bfile = ((OracleResultSet) rset).getBFILE (3);
byte[] bytes = bfile.getBytes (<begin index>, <length>);
* To read the LOB content as a stream.
BLOB blob = ((OracleResultSet) rset).getBLOB (1);
InputStream input_stream = blob.getBinaryStream ();
input_stream.read (...);
CLOB Clob = ((OracleResultSet) rset).getCLOB (1);
Reader char_stream = Clob.getCharacterStream ();
char_stream.read (...);
CLOB Clob = ((OracleResultSet) rset).getCLOB (1);
InputStream input_stream = Clob.getAsciiStream ();
input_stream.read (...);
BFILE bfile = ((OracleResultSet) rset).getBFILE (1);
InputStream input_stream = bfile.getBinaryStream ();
input_stream.read (...);
* To write a specified amount of data into a LOB.
BLOB blob = ((OracleResultSet) rset).getBLOB (1);
byte[] data = ...
int amount_written = blob.putBytes (<begin index>, data);
CLOB clob = ((OracleResultSet) rset).getCLOB (1);
String data = ...
int amount_written = clob.putString (<begin index>, data);
* To replace the LOB content from a stream.
BLOB blob = ((OracleResultSet) rset).getBLOB (1);
OutputStream output_stream = blob.getBinaryOutputStream ();
output_stream.write (...);
CLOB clob = ((OracleResultSet) rset).getCLOB (1);
Writer char_stream = Clob.getCharacterOutputStream ();
char_stream.write (...);
CLOB Clob = ((OracleResultSet) rset).getCLOB (1);
OutputStream output_stream = Clob.getAsciiOutputStream ();
output_stream.write (...);
* To get LOB length.
long length = blob.length ();
long length = clob.length ();
long length = bfile.length ();
2009년 7월 24일 금요일
Java 파일 이어쓰기
BufferedWriter file = new BufferedWriter(new FileWriter("filename"));
//파일을 덮어쓴다.
BufferedWriter file = new BufferedWriter(new FileWriter("filename", true));
//이 코드는 파일이 없으면 새로 만들고 있다면 덮어쓰지 않고 이어서 쓰게한다.
BufferedWriter를 통해서 개행문자사용
file.write(str, 0, str.length());
file.newLine();
Java 날짜 팁
시스템의 밀리초 구하기.(국제표준시각(UTC, GMT) 1970/1/1/0/0/0 으로부터 경과한 시각)
------------------------------------------------------------------
// 밀리초 단위(*1000은 1초), 음수이면 이전 시각
long time = System.currentTimeMillis ( );
System.out.println ( time.toString ( ) );
------------------------------------------------------------------
현재 시각을 가져오기
------------------------------------------------------------------
Date today = new Date ();
System.out.println ( today );
결과 : Sat Jul 12 16:03:00 GMT+01:00 2000
------------------------------------------------------------------
경과시간(초) 구하기
------------------------------------------------------------------
long time1 = System.currentTimeMillis ();
long time2 = System.currentTimeMillis ();
system.out.println ( ( time2 - time1 ) / 1000.0 );
------------------------------------------------------------------
Date를 Calendar로 맵핑시키기
------------------------------------------------------------------
Date d = new Date ( );
Calendar c = Calendar.getInstance ( );
c.setTime ( d );
------------------------------------------------------------------
날짜(년/월/일/시/분/초) 구하기
------------------------------------------------------------------
import java.util.*;
import java.text.*;
SimpleDateFormat formatter = new SimpleDateFormat ( "yyyy.MM.dd HH:mm:ss", Locale.KOREA );
Date currentTime = new Date ( );
String dTime = formatter.format ( currentTime );
System.out.println ( dTime );
------------------------------------------------------------------
날짜(년/월/일/시/분/초) 구하기2
------------------------------------------------------------------
GregorianCalendar today = new GregorianCalendar ( );
int year = today.get ( today.YEAR );
int month = today.get ( today.MONTH ) + 1;
int yoil = today.get ( today.DAY_OF_MONTH );
GregorianCalendar gc = new GregorianCalendar ( );
System.out.println ( gc.get ( Calendar.YEAR ) );
System.out.println ( String.valueOf ( gc.get ( Calendar.MONTH ) + 1 ) );
System.out.println ( gc.get ( Calendar.DATE ) );
System.out.println ( gc.get ( DAY_OF_MONTH ) );
------------------------------------------------------------------
날짜(년/월/일/시/분/초) 구하기3
------------------------------------------------------------------
DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.KOREA);
Calendar cal = Calendar.getInstance(Locale.KOREA);
nal = df.format(cal.getTime());
------------------------------------------------------------------
표준시간대를 지정하고 날짜를 가져오기.
------------------------------------------------------------------
TimeZone jst = TimeZone.getTimeZone ("JST");
Calendar cal = Calendar.getInstance ( jst ); // 주어진 시간대에 맞게 현재 시각으로 초기화된 GregorianCalender 객체를 반환.// 또는 Calendar now = Calendar.getInstance(Locale.KOREA);
System.out.println ( cal.get ( Calendar.YEAR ) + "년 " + ( cal.get ( Calendar.MONTH ) + 1 ) + "월 " + cal.get ( Calendar.DATE ) + "일 " + cal.get ( Calendar.HOUR_OF_DAY ) + "시 " +cal.get ( Calendar.MINUTE ) + "분 " + cal.get ( Calendar.SECOND ) + "초 " );
결과 : 2000년 8월 5일 16시 16분 47초
------------------------------------------------------------------
영어로된 날짜를 숫자로 바꾸기
------------------------------------------------------------------
Date myDate = new Date ( "Sun,5 Dec 1999 00:07:21" );
System.out.println ( myDate.getYear ( ) + "-" + myDate.getMonth ( ) + "-" + myDate.getDay ( ) );
------------------------------------------------------------------
"Sun, 5 Dec 1999 00:07:21"를 "1999-12-05"로 바꾸기
------------------------------------------------------------------
SimpleDateFormat formatter_one = new SimpleDateFormat ( "EEE, dd MMM yyyy hh:mm:ss",Locale.ENGLISH );
SimpleDateFormat formatter_two = new SimpleDateFormat ( "yyyy-MM-dd" );
String inString = "Sun, 5 Dec 1999 00:07:21";
ParsePosition pos = new ParsePosition ( 0 );
Date frmTime = formatter_one.parse ( inString, pos );
String outString = formatter_two.format ( frmTime );
System.out.println ( outString );
------------------------------------------------------------------
숫자 12자리를, 다시 날짜로 변환하기
------------------------------------------------------------------
Date conFromDate = new Date();
long ttl = conFromDate.parse ( "Dec 25, 1997 10:10:10" );
System.out.println ( ttl ); //예 938291839221
Date today = new Date ( ttl );
DateFormat format = DateFormat.getDateInstance ( DateFormat.FULL,Locale.US );
String formatted = format.format ( today );
System.out.println ( formatted );
------------------------------------------------------------------
특정일로부터 n일 만큼 이동한 날짜 구하기
------------------------------------------------------------------
특정일의 시간을 long형으로 읽어온다음..
날짜*24*60*60*1000 을 계산하여.
long형에 더해줍니다.
그리고 나서 Date클래스와 Calender클래스를 이용해서 날짜와 시간을 구하면 됩니다
------------------------------------------------------------------
특정일에서 일정 기간후의 날짜 구하기2
------------------------------------------------------------------
//iDay 에 입력하신 만큼 빼거나 더한 날짜를 반환 합니다.
import java.util.*;
public String getDate ( int iDay )
{
Calendar temp=Calendar.getInstance ( );
StringBuffer sbDate=new StringBuffer ( );
temp.add ( Calendar.DAY_OF_MONTH, iDay );
int nYear = temp.get ( Calendar.YEAR );
int nMonth = temp.get ( Calendar.MONTH ) + 1;
int nDay = temp.get ( Calendar.DAY_OF_MONTH );
sbDate.append ( nYear );
if ( nMonth < 10 )
sbDate.append ( "0" );
sbDate.append ( nMonth );
if ( nDay < 10 )
sbDate.append ( "0" );
sbDate.append ( nDay );
return sbDate.toString ( );
}
------------------------------------------------------------------
현재날짜에서 2달전의 날짜를 구하기
------------------------------------------------------------------
Calendar cal = Calendar.getInstance ( );//오늘 날짜를 기준으루..
cal.add ( cal.MONTH, -2 ); //2개월 전....
System.out.println ( cal.get ( cal.YEAR ) );
System.out.println ( cal.get ( cal.MONTH ) + 1 );
System.out.println ( cal.get ( cal.DATE ) );
------------------------------------------------------------------
달에 마지막 날짜 구하기
------------------------------------------------------------------
for ( int month = 1; month <= 12; month++ )
{
GregorianCalendar cld = new GregorianCalendar ( 2001, month - 1, 1 );
System.out.println ( month + "/" + cld.getActualMaximum ( Calendar.DAY_OF_MONTH ) );
}
------------------------------------------------------------------
해당하는 달의 마지막 일 구하기
------------------------------------------------------------------
GregorianCalendar today = new GregorianCalendar ( );
int maxday = today.getActualMaximum ( ( today.DAY_OF_MONTH ) );
System.out.println ( maxday );
------------------------------------------------------------------
특정일을 입력받아 해당 월의 마지막 날짜를 구하는 간단한 예제.(달은 -1 해준다.)...윤달 30일 31일 알아오기
------------------------------------------------------------------
Calendar cal = Calendar.getInstance ( );
cal.set ( Integer.parseInt ( args[0] ), Integer.parseInt ( args [1] ) - 1, Integer.parseInt ( args [2] ) );
SimpleDateFormat dFormat = new SimpleDateFormat ( "yyyy-MM-dd" );
System.out.println ( "입력 날짜 " + dFormat.format ( cal.getTime ( ) ) );
System.out.println ( "해당 월의 마지막 일자 : " + cal.getActualMaximum ( Calendar.DATE ) );
------------------------------------------------------------------
해당월의 실제 날짜수 구하기 ( 1999년 1월달의 실제 날짜수를 구하기 )
------------------------------------------------------------------
Calendar calendar = Calendar.getInstance ( );
calendar.set ( 1999, 0, 1 );
int maxDays = calendar.getActualMaximum ( Calendar.DAY_OF_MONTH );
------------------------------------------------------------------
어제 날짜 구하기
------------------------------------------------------------------
오늘날짜를 초단위로 구해서 하루분을 빼주고 다시
셋팅해주면 쉽게 구할수 있죠..
setTime((기준일부터 오늘까지의 초를 구함) - 24*60*60)해주면 되겠죠..
------------------------------------------------------------------
어제 날짜 구하기2
------------------------------------------------------------------
import java.util.*;
public static Date getYesterday ( Date today )
{
if ( today == null )
throw new IllegalStateException ( "today is null" );
Date yesterday = new Date ( );
yesterday.setTime ( today.getTime ( ) - ( (long) 1000 * 60 * 60 * 24 ) );
return yesterday;
}
------------------------------------------------------------------
내일 날짜 구하기
------------------------------------------------------------------
Date today = new Date ( );
Date tomorrow = new Date ( today.getTime ( ) + (long) ( 1000 * 60 * 60 * 24 ) );
------------------------------------------------------------------
내일 날짜 구하기2
------------------------------------------------------------------
Calendar today = Calendar.getInstance ( );
today.add ( Calendar.DATE, 1 );
Date tomorrow = today.getTime ( );
------------------------------------------------------------------
오늘날짜에서 5일 이후 날짜를 구하기
------------------------------------------------------------------
Calendar cCal = Calendar.getInstance();
c.add(Calendar.DATE, 5);
------------------------------------------------------------------
날짜에 해당하는 요일 구하기
------------------------------------------------------------------
//DAY_OF_WEEK리턴값이 일요일(1), 월요일(2), 화요일(3) ~~ 토요일(7)을 반환합니다.
//아래 소스는 JSP일부입니다.
import java.util.*;
Calendar cal= Calendar.getInstance ( );
int day_of_week = cal.get ( Calendar.DAY_OF_WEEK );
if ( day_of_week == 1 )
m_week="일요일";
else if ( day_of_week == 2 )
m_week="월요일";
else if ( day_of_week == 3 )
m_week="화요일";
else if ( day_of_week == 4 )
m_week="수요일";
else if ( day_of_week == 5 )
m_week="목요일";
else if ( day_of_week == 6 )
m_week="금요일";
else if ( day_of_week == 7 )
m_week="토요일";
오늘은 : 입니다.
------------------------------------------------------------------
콤보박스로 선택된 날짜(예:20001023)를 통해 요일을 영문으로 가져오기
------------------------------------------------------------------
//gc.get(gc.DAY_OF_WEEK); 하면 일요일=1, 월요일=2, ..., 토요일=7이 나오니까,
//요일을 배열로 만들어서 뽑아내면 되겠죠.
GregorianCalendar gc=new GregorianCalendar ( 2000, 10 - 1 , 23 );
String [] dayOfWeek = { "", "Sun", "Mon", .... , "Sat" };
String yo_il = dayOfWeek ( gc.get ( gc.DAY_OF_WEEK ) );
------------------------------------------------------------------
두 날짜의 차이를 일수로 구하기
------------------------------------------------------------------
각각의 날짜를 Date형으로 만들어서 getTime()하면
long으로 값이 나오거든요(1970년 1월 1일 이후-맞던가?- 1/1000 초 단위로..)
그러면 이값의 차를 구해서요. (1000*60*60*24)로 나누어 보면 되겠죠.
------------------------------------------------------------------
두 날짜의 차이를 일수로 구하기2
------------------------------------------------------------------
import java.io.*;
import java.util.*;
Date today = new Date ( );
Calendar cal = Calendar.getInstance ( );
cal.setTime ( today );// 오늘로 설정.
Calendar cal2 = Calendar.getInstance ( );
cal2.set ( 2000, 3, 12 ); // 기준일로 설정. month의 경우 해당월수-1을 해줍니다.
int count = 0;
while ( !cal2.after ( cal ) )
{
count++;
cal2.add ( Calendar.DATE, 1 ); // 다음날로 바뀜
System.out.println ( cal2.get ( Calendar.YEAR ) + "년 " + ( cal2.get ( Calendar.MONTH ) + 1 ) + "월 " + cal2.get ( Calendar.DATE ) + "일" );
}
System.out.println ( "기준일로부터 " + count + "일이 지났습니다." );
------------------------------------------------------------------
두 날짜의 차이를 일수로 구하기3
------------------------------------------------------------------
import java.io.*;
import java.util.*;
public class DateDiff
{
public static int GetDifferenceOfDate ( int nYear1, int nMonth1, int nDate1, int nYear2, int nMonth2, int nDate2 )
{
Calendar cal = Calendar.getInstance ( );
int nTotalDate1 = 0, nTotalDate2 = 0, nDiffOfYear = 0, nDiffOfDay = 0;
if ( nYear1 > nYear2 )
{
for ( int i = nYear2; i < nYear1; i++ )
{
cal.set ( i, 12, 0 );
nDiffOfYear += cal.get ( Calendar.DAY_OF_YEAR );
}
nTotalDate1 += nDiffOfYear;
}
else if ( nYear1 < nYear2 )
{
for ( int i = nYear1; i < nYear2; i++ )
{
cal.set ( i, 12, 0 );
nDiffOfYear += cal.get ( Calendar.DAY_OF_YEAR );
}
nTotalDate2 += nDiffOfYear;
}
cal.set ( nYear1, nMonth1-1, nDate1 );
nDiffOfDay = cal.get ( Calendar.DAY_OF_YEAR );
nTotalDate1 += nDiffOfDay;
cal.set ( nYear2, nMonth2-1, nDate2 );
nDiffOfDay = cal.get ( Calendar.DAY_OF_YEAR );
nTotalDate2 += nDiffOfDay;
return nTotalDate1-nTotalDate2;
}
public static void main ( String args[] )
{
System.out.println ( "" + GetDifferenceOfDate (2000, 6, 15, 1999, 8, 23 ) );
}
}
------------------------------------------------------------------
파일에서 날짜정보를 가져오기
------------------------------------------------------------------
File f = new File ( directory, file );
Date date = new Date ( f.lastModified ( ) );
Calendar cal = Calendar.getInstance ( );
cal.setTime ( date );
System.out.println("Year : " + cal.get(Calendar.YEAR));
System.out.println("Month : " + (cal.get(Calendar.MONTH) + 1));
System.out.println("Day : " + cal.get(Calendar.DAY_OF_MONTH));
System.out.println("Hours : " + cal.get(Calendar.HOUR_OF_DAY));
System.out.println("Minutes : " + cal.get(Calendar.MINUTE));
System.out.println("Second : " + cal.get(Calendar.SECOND));
------------------------------------------------------------------
날짜형식으로 2000-01-03으로 처음에 인식을 시킨후
7일씩 증가해서 1년정도의 날짜를 출력해 주고 싶은데요.
------------------------------------------------------------------
SimpleDateFormat sdf = new SimpleDateFormat ( "yyyy-mm-dd" );
Calendar c = Calendar.getInstance ( );
for ( int i = 0; i < 48; i++ )
{
c.clear ( );
c.set ( 2000, 1, 3 - ( i * 7 ) );
java.util.Date d = c.getTime ( );
String thedate = sdf.format ( d );
System.out.println ( thedate );
}
------------------------------------------------------------------
쓰레드에서 날짜 바꾸면 죽는 문제
------------------------------------------------------------------
Main화면에 날짜와시간이Display되는 JPanel이 있습니다.
date로 날짜와 시간을 변경하면 Main화면의 날짜와 시간이 Display되는 Panel에
변경된 날짜가 Display되지 않고 Main화면이 종료되어 버립니다.
문제소스:
public void run ( )
{
while ( true )
{
try{
timer.sleep ( 60000 );
}
catch ( InterruptedException ex ) { }
lblTimeDate.setText ( fGetDateTime ( ) );
repaint ( );
}
}
public String fGetDateTime ( )
{
final int millisPerHour = 60 * 60 * 1000;
String DATE_FORMAT = "yyyy / MM / dd HH:mm";
SimpleDateFormat sdf = new SimpleDateFormat ( DATE_FORMAT );
SimpleTimeZone timeZone = new SimpleTimeZone ( 9 * millisPerHour, "KST" );
sdf.setTimeZone ( timeZone );
long time = System.currentTimeMillis ( );
Date date = new Date ( time );
return sdf.format ( date );
}
해답:
// 날짜와 요일 구한다. timezone 으로 날짜를 다시 셋팅하시면 됨니다.
public String getDate ( )
{
Date now = new Date ( );
SimpleDateFormat sdf4 = new SimpleDateFormat ( "yyyy/MM/dd HH:mm EE" );
sdf4.setTimeZone ( TimeZone.getTimeZone ( "Asia/Seoul" ) );
return sdf4.format ( now );
}
------------------------------------------------------------------
날짜와 시간이 유효한지 검사하려면...?
------------------------------------------------------------------
import java.util.*;
import java.text.*;
public class DateCheck
{
boolean dateValidity = true;
DateCheck ( String dt )
{
try
{
DateFormat df = DateFormat.getDateInstance ( DateFormat.SHORT );
df.setLenient ( false );
Date dt2 = df.parse ( dt );
}
catch ( ParseException e ) { this.dateValidity = false; }
catch ( IllegalArgumentException e ) { this.dateValidity = false; }
}
public boolean datevalid ( )
{
return dateValidity;
}
public static void main ( String args [] )
{
DateCheck dc = new DateCheck ( "2001-02-28" );
System.out.println ( " 유효한 날짜 : " + dc.datevalid ( ) );
}
}
------------------------------------------------------------------
두 날짜 비교하기(아래보다 정확)
------------------------------------------------------------------
그냥 날짜 두개를 long(밀리 세컨드)형으로 비교하시면 됩니다...
이전의 데이타가 date형으로 되어 있다면, 이걸 long형으로 변환하고.
현재 날짜(시간)은 System.currentTimeMillis()메소드로 읽어들이고,
두수(long형)를 연산하여 그 결과 값으로 비교를 하시면 됩니다.
만약 그 결과값이 몇시간 혹은 며칠차이가 있는지를 계산할려면,
결과값을 Calender의 setTimeInMillis(long millis) 메소드를 이용해
설정한다음 각각의 날짜나 시간을 읽어오시면 됩니다
------------------------------------------------------------------
두 날짜 비교하기2
------------------------------------------------------------------
//Calendar를 쓸 경우 데이타의 원본을 고치기 때문에 clone()을 사용하여
//복사한 후에 그 복사본을 가지고 비교한다
import java.util.*;
import java.util.Calendar.*;
import java.text.SimpleDateFormat;
public class DayComparisonTest
{
public static void main(String args[])
{
Calendar cal = Calendar.getInstance();
SimpleDateFormat dateForm = new SimpleDateFormat("yyyy-MM-dd");
Calendar aDate = Calendar.getInstance(); // 비교하고자 하는 임의의 날짜
aDate.set(2001, 0, 1);
Calendar bDate = Calendar.getInstance(); // 이것이 시스템의 날짜
// 여기에 시,분,초를 0으로 세팅해야 before, after를 제대로 비교함
aDate.set( Calendar.HOUR_OF_DAY, 0 );
aDate.set( Calendar.MINUTE, 0 );
aDate.set( Calendar.SECOND, 0 );
aDate.set( Calendar.MILLISECOND, 0 );
bDate.set( Calendar.HOUR_OF_DAY, 0 );
bDate.set( Calendar.MINUTE, 0 );
bDate.set( Calendar.SECOND, 0 );
bDate.set( Calendar.MILLISECOND, 0 );
if (aDate.after(bDate)) // aDate가 bDate보다 클 경우 출력
System.out.println("시스템 날짜보다 뒤일 경우 aDate = " + dateForm.format(aDate.getTime()));
else if (aDate.before(bDate)) // aDate가 bDate보다 작을 경우 출력
System.out.println("시스템 날짜보다 앞일 경우 aDate = " + dateForm.format(aDate.getTime()));
else // aDate = bDate인 경우
System.out.println("같은 날이구만");
}
}
2009년 7월 9일 목요일
DecimalFormat
import java.text.DecimalFormat;
class test
{
public static void main(String[] args)
{
DecimalFormat dec1 = new DecimalFormat("###.000");
DecimalFormat dec2 = new DecimalFormat("###.###");
// 0 : 값이 없으면 그자리에 0을 출력함
// # : 값이 없으면 출력하지 않음
// . : 소수점을 나타낸다
float num=1.1f;
System.out.println(dec1.format(num));
System.out.println(dec2.format(num));
}
}
--result-----------------------------------------------------------------
1.100
1.1
break Label
@break label
exit_For:
{
for( int i=0 ; i<5 ; i++)
{
for( int j=0 ; j<5 ; j++)
{
if(j==3) break exit_For;
System.out.println("i:"+i+" j:"+j);
}
}
}
--result-----------------------------
1
2
2009년 7월 2일 목요일
File list
Enumeration
window close
Exception
MediaTracker
Image Crop
PixelGrabber
Process
2009년 6월 29일 월요일
최단거리(미완성)
Djikstra's algorithm (named after its discover, E.W. Dijkstra) solves the problem of finding the shortest path from a point in a graph (the source) to a destination. It turns out that one can find the shortest paths from a given source to all points in a graph in the same time, hence this problem is sometimes called the single-source shortest paths problem.