10-1
import java.uti.*;
import java.text.*;
class Exercise10_1 {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
cal.set(2010,0,1) //2010.1.1로 설정
for (int i=0; i<12; i++) {
int weekday = cal.get(Calendar.DAY_OF_WEEK); //1일의 요일 구함
int secondSunday = (weekday==1) ? 8 : 16 - weekday;
//두번째 일요일로 날짜를 바꿈
cal.set(Calendar.DAY_OF_MONTH, secondSunday);
//Date로 변환해서 format에 맞게 출력
//F : 월의 몇 번째 요일? E : 요일
Date d = cal.getTime();
System.out.println(new SimpleDateFormat("yyyy-MM-dd은 F번째 E요일입니다.").format(d));
//날짜를 다음달 1일로 변경한다.
cal.add(Calendar.MONTH, 1); //월+1
cal.set(Calendar.DAY_OF_MONTH, 1); //1일로 변경
}
}
}
1일의 요일 | weekday | 2번째 일요일 | weekday + 2번째 일요일 |
일 | 1 | 8일 | 9 |
월 | 2 | 14일 | 16 |
화 | 3 | 13일 | 16 |
수 | 4 | 12일 | 16 |
목 | 5 | 11일 | 16 |
금 | 6 | 10일 | 16 |
토 | 7 | 9일 | 16 |
10-2
if (from == null || to == null) return 0;
if (from.equals(to) && from.get(Calendar.DAY_OF_MONTH) == 21) {
return 1;
}
int fromYear = from.get(Calendar.YEAR);
int fromMon = from.get(Calendar.MONTH);
int fromDay = from.get(Calendar.DAY_OF_MONTH);
int toYear = to.get(Calendar.YEAR);
int toMon = to.get(Calendar.MONTH);
int toDay = to.get(Calendar.DAY_OF_MONTH);
//몇 개월 차이인지 계산
int monDiff = (toYear * 12 + toMon) - (fromYear * 12 + fromMon);
if (monDiff < 0) return 0;
if (fromDay <= 21 && toDay >= 21)
monDiff++;
if (fromDay > 21 && toDay < 21)
monDiff--;
10-3
import java.util.*;
import java.text.*;
class Exercise10_3 {
public static void main(String[] args) {
String data = "123,456,789.5";
DecimalFormat df = new DecimalFormat("#,###.##");
DecimalFormat df2 = new DecimalFormat("#,####");
//#은 빈자리를 채우지 않음
try {
Number num = df.parse(data);
//모든 Wrapper class는 Number class를 상속받음
double d = num.doubleValue();
System.out.println("data:"+data);
System.out.println("반올림:"+Math.round(d));
System.out.println("만단위:"+df2.format(d));
} catch (Exception e) {}
}
}
parse의 반환타입이 Number
10-4
import java.util.*;
import java.text.*;
class Exercise10_4 {
public static void main(String[] args) {
String pattern = "yyyy/MM/dd";
String pattern2 = "입력하신 날짜는 E요일입니다.";
DateFormat df = new SimpleDateFormat(pattern);
DateFormat df2 = new SimpleDateFormat(pattern2);
Scanner s = new Scanner(System.in);
Date inDate = null;
do {
System.out.println("날짜를 " +pattern+"의 형태로 입력해주세요.(입력예:2007/05/11)");
try {
System.out.print(">>");
inDate = df.parse(s.nextLine());
break; //parse()에서 예외가 발생하자면 이 문장은 수행되지 않음
}catch (Exception e) {}
} while(true);
System.out.println(df2.format(inDate));
}
}
10-5
static int getDayDiff(String yyyymmdd1, String yyyymmdd2) {
int diff = 0;
try {
int year1 = Integer.parseInt(yyyymmdd1.substring(0,4));
int month1 = Integer.parseInt(yyyymmdd1.substring(4,6))-1;
int day1 = Integer.parseInt(yyyymmdd1.substring(6,8));
int year2 = Integer.parseInt(yyyymmdd2.substring(0,4));
int month2 = Integer.parseInt(yyyymmdd2.substring(4,6))-1;
int day2 = Integer.parseInt(yyyymmdd2.substring(6,8));
Calendar date1 = Calendar.getInstance();
Calendar date2 = Calendar.getInstance();
date1.set(year1, month1, day1);
date2.set(year2, month2, day2);
diff = (int)((date1.getTimeInMillis()-date2.getTimeInMillis())/(24*60*60*1000));
}catch (Exception e) {
diff = 0;
}
return diff;
}
getTimeInMillis() 1000분의 1초 단위 ---> /1000*24(시)*60(분)*60(초)
10-6
import java.time.*;
import java.time.temporal.*;
class Exercise10_6 {
public static void main(Stirng[] args) {
LocalDate birth = LocalDate.of(1995, 1, 12);
LocalDate now = LocalDate.now();
long days = birthDay.until(now, ChronoUnit.DAYS);
System.out.println("birthday=" + birthday);
System.out.println("today =" + today);
System.out.println(long + " days");
}
}
until() 메소드 dday 또는 두 날짜의 차이?!!
10-7
import java.time.*;
import static java.time.DayOfWeek.*;
import static java.time.temporal.TemporalAdjusters.*;
class Exercise10_7 {
public static void main(String[] args) {
LocalDate date = LocalDate.of(2016, 12, 27);
System.out.println(date.with(dayOfWeekInMonth(4, TUESDAY))); //넷째주 화요일의 날짜 출력
}
}
10-8
import java.time.*;
class Exercise10_8 {
public static void main(String[] args) {
ZonedDateTime zdt = ZonedDateTime.now();
ZoneId nyId = ZoneId.of("America/New_York");
ZonedDateTime zdtNY = ZonedDateTime.now().withZoneSameInstant(nyId);
//ZonedDateTime zdtNY = ZonedDateTime.now(ZoneId.of(“America/New_York”));
System.out.println(zdt);
System.out.println(zdtNY);
long sec1 = zdt.getOffset().getTotalSeconds();
long sec2 = zdtNY.getOffset().getTotalSeconds();
long diff = (sec1-sec2)/3600;
System.out.println("sec1="+sec1);
System.out.println("sec2="+sec2);
System.out.println("diff=%d hrs%n", diff);
}
}
getOffset()은 ZoneOffset을 반환, ZoneOffset의 getTotalSeconds()를 호출하면 날짜와 시간을 초단위로 변환한 결과가 나온다.
ZoneOffset offset = zdt.getOffset();
long sec1 = offset.getTotalSeconds();
반응형
댓글