S-JIS[2008-02-16/2017-09-27] �ύX����

Java ���t�����E�J�����_�[

Java�œ��t�⎞���������N���X�ɂ‚��āB��JDK1.8�ȍ~�����t����API�ijava.time�j���g���B


java.lang.System

System�N���X�ɁA���ݎ����iUTC�j�ɓ�����l��long�^�̐����ŕԂ����\�b�h������B[2008-07-05]

���\�b�h�� ����
currentTimeMillis() �P�ʂ̓~���b�B
���������x��10�~���b���x�i10�~���b�Ԋu�̐��l�����Ԃ��Ȃ��BOS�ˑ��ł���AWindowsXP����16�~���b���炢�ȋC������j�B
nanoTime() �P�ʂ̓i�m�b�BJDK1.5�ȍ~�B
���ԊԊu�i�o�ߎ��ԁj�𑪂�̂ɂ����g���Ȃ��B
	long s = System.nanoTime();
	�`
	long e = System.nanoTime();
	System.out.printf("�o�ߎ��ԁF%d�i�m�b%n", e - s);

java.util.concurrent.TimeUnit

TimeUnit�́A�P�ʂ‚����Ԃ�\���񋓌^�BJDK1.5�Œlj����ꂽ�B[2008-07-30]

�� ���� �Q�l
TimeUnit.SECONDS.toMillis(�b) �b���~���b�ɕϊ�����B Timer#schedule()
TimeUnit.MILLISECONDS.toSeconds(�~���b) �~���b��b�ɕϊ�����B �b�P�ʂ̌o�ߎ���
TimeUnit.SECONDS.sleep(�b) �b�P�ʂŃX���[�v����B Thread.sleep()
TimeUnit.NANOSECONDS.sleep(�i�m�b) �i�m�b�P�ʂŃX���[�v����B

Java9�ŁA���t����API��ChronoUnit�ɕϊ����郁�\�b�h���lj����ꂽ�B[2017-09-27]

import java.time.temporal.ChronoUnit;
import java.util.concurrent.TimeUnit;
	ChronoUnit seconds = TimeUnit.SECONDS.toChronoUnit(); // ChronoUnit.SECONDS
	TimeUnit seconds = TimeUnit.of(ChronoUnit.SECONDS); // TimeUnit.SECONDS

java.util.Date

java.util.Date�́AJava�œ�����ێ�����N���X�BDate�i���t�j�Ƃ������O�����ǁA�������ێ��ł���B�^�C���]�[���͕ێ�����Ȃ��iUTC�ł���j�B �i��JDK1.8��LocalDateTime�j[/2016-05-30]

import java.util.Date;
	Date now = new Date();	//���ݓ�����Date���쐬
	Date now = new Date(System.currentTimeMillis()); //�����Ԃ͂���

Date�N���X�ɂ͔N������N���������b�������ɂƂ�R���X�g���N�^�[������i�������j���A���݂�deprecated�ɂȂ��Ă���ACalendar�N���X��DateFormat�N���X���g���ē���̓������쐬����̂���������Ă���B

�܂��A�N�E���E���E�����𒼐ڎw�肵����擾�����肷�郁�\�b�h������i�������j���A���݂�Calendar�N���X���g�����Ƃ���������Ă���B


toString()�ŁA�ێ����Ă�������𕶎���ɂ��ďo�͂��邱�Ƃ��o����B
�������o�͂������e�́A���{�l���猩��Ƃ��܂茩�₷���Ȃ��B���`��DateFormat�N���X���g���B
������������Ƃ����f�o�b�O�ŏo�͂������Ȃ�AtoString()�ŏ[���B

	System.out.println(now);
Sat Feb 16 01:48:45 JST 2008

java.util.Date���g���^�C���]�[����ێ����Ă��Ȃ��iUTC�ł���j�B[2016-05-30]
�������AtoString()�ł��f�t�H���g�^�C���]�[�����擾���āA���̃^�C���]�[���̒l���o�͂����B�i��L�̗��JST�ƕ\������Ă���̂́A���{�̃p�\�R���Ŏ��s��������j
�񐄏��ɂ͂Ȃ��Ă��邪�AtoGMTString()���g���ƁAGMT�i��UTC�j�̒l���o�͂����B


java.sql.Date

java.sql.Date��Java��DB�֘A�̕W���N���X�Ȃ̂ŁADB�������Ă���Ƃ悭�o�Ă���B
java.sql.Date��java.util.Date���p�����Ă���̂ŁAjava.util.Date�Ƃ��Ĉ������Ƃ��o����B

�N���X����Date�Ȃ̂�java.util.Date�Ƃ܂���킵���̂ŗv���ӁB
���ɂǂ����import���Ă���̂����悭�C�ɂ���K�v������B�i2�—����𓯎���import���邱�Ƃ͏o���Ȃ��j

import java.sql.Date;
	Date sqlNow = new Date(System.currentTimeMillis());
	java.util.Date utilDate = sqlNow; //java.util.Date����h�����Ă���̂ŁA�L���X�g�������ł�����ł���
	Date sqlDate = new Date(utilDate.getTime());

java.text.DateFormat

DateFormat�͓��t�̏����������N���X�B
Date�𐮌`���ĕ�����ɕϊ�������A�����񂩂�Date�C���X�^���X���������o����B �i��JDK1.8��DateTimeFormatter�j

��̓I�ɂ�SimpleDateFormat�������������w�肵�ăC���X�^���X�����Aparse()��format()���g���ĕϊ�����B

������Date�i�G���[����ParseException�������j�F

	DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
	Date date = df.parse("2008/02/16");
//	Date date = df.parse("2008/2/1");	//���ꂭ�炢�Ȃ�G���[�ɂȂ炸����ɕϊ������
//	Date date = df.parse("2008:02:16");	//ParseException����������

DateFormat#setLenient(false)���ĂԂƌ����Ƀ}�b�`���邩�`�F�b�N�����悤�ɂȂ�A�B���ȏ�Ԃ̓G���[�ɂȂ�B[2009-02-04]

������Date�i�G���[���̓G���[�ʒu��Ԃ��j�F

	DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
	ParsePosition pos = new ParsePosition(0);
	Date date = df.parse("2008/02/16", pos);
	System.out.println(pos.getErrorIndex());	//����I���Ȃ�G���[�ʒu��-1
	pos = new ParsePosition(0);
	date = df.parse("2008:02/16", pos);
	System.out.println(pos.getErrorIndex());	//�G���[���̓G���[�̂������ʒu�i���̗Ⴞ��4�j

Date���������F

	Date date = new Date();
	DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
	System.out.println(df.format(date));

�������̃p�^�[�������́ASimpleDateFormat��Javadoc�ɏڍׂ��ڂ��Ă���B


SimpleDateFormat�iDateFormat�j���^�C���]�[����ێ����Ă���B[2016-05-30]
�^�C���]�[����ς������ꍇ��setTimeZone()���g���B

	Date date = new Date();
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	sdf.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo"));
	System.out.println(sdf.format(date));

Date�𕶎���ɕϊ��iformat�j����Ƃ��́A�iDate���g�̓^�C���]�[����ێ����Ă��Ȃ��̂ŁjDateFormat���ێ����Ă���^�C���]�[�������ɕϊ������B

�����񂩂�Date�ɕϊ��iparse�j����Ƃ��́A���̕������DateFormat���ێ����Ă���^�C���]�[���̓����Ƃ��Ĉ�����B


�Ȃ��ASimpleDateFormat��MT�Z�[�t�ł͂Ȃ��̂ŁA�}���`�X���b�h�Ŏg���ꍇ�ɂ͒����B �iDateFormat�Ɍ��炸�A����Format�n�N���X���j
�Q�l�F AKIMOTO, Hiroki�����SimpleDateFormat �̓X���b�h�Z�[�t�ł͂Ȃ�
���Ȃ݂ɂ����ł�Date#toString()����Ȃ��Ə����Ă��邪�A����������JDK1.3�̘b����Ȃ��낤���B
JDK1.4�ł�SimpleDateFormat���g���ۂ�synchronized���Ă邩����v�Ȃ񂶂�Ȃ����Ȃ��H
JDK1.5��1.6�ł�DateFormat���g�킸StringBuilder���g���Ē��ڕ�����𐶐����Ă��邩����v���낤�B

���Ȃ݂�SimpleDateFormat�́Asynchronized���g���ē����������̂�����new�ō���̂Ƃł́A���������������������������ۂ��B[/2008-05-12]
�ȉ��̂悤�ȃX���b�h�𕡐����s�Ŏ��s���A���Ԃ��v�����Ă݂��B�iWindowsXP�AJDK1.6�j

���s�� �o�b�`�p�^�[���P �o�b�`�p�^�[���Q �o�b�`�p�^�[���R �o�b�`�p�^�[���Q�f �o�b�`�p�^�[���P�f
�@ �S�̂ŋ��ʂ�DateFormat�𐶐�
��������i�������K�v�j
���[�v���Ŗ���DateFormat�𐶐�
�����Ȃ��i�����͕s�v�j
ThreadLocal��DateFormat�𐶐�
�����Ȃ��i�����͕s�v�j[2008-07-10]
���[�v�O��DateFormat�𐶐�
�����Ȃ��i�����͕s�v�j
�X���b�h��p��DateFormat�𐶐�
�����Ȃ��i�����͕s�v�j
�@
class Worker1 extends Thread {




  private static final DateFormat df
    = new SimpleDateFormat("yyyy/MM/dd");



  @Override
  public void run() {


    for (int i = 0; i < 10000; i++) {


      synchronized (df) {
        try {
          df.parse("2008/04/26");
        } catch (ParseException e) {
          e.printStackTrace();
        }
      }

    }
  }

}
class Worker2 extends Thread {









  @Override
  public void run() {


    for (int i = 0; i < 10000; i++) {
      DateFormat df
        = new SimpleDateFormat("yyyy/MM/dd");

      try {
        df.parse("2008/04/26");
      } catch (ParseException e) {
        e.printStackTrace();
      }


    }
  }

}
class Worker3 extends Thread {

  private static final ThreadLocal<DateFormat>
    dflocal = new ThreadLocal<DateFormat>() {
      @Override
      protected DateFormat initialValue() {
        return new SimpleDateFormat("yyyy/MM/dd");
      }
    };

  @Override
  public void run() {


    for (int i = 0; i < 10000; i++) {
      DateFormat df = dflocal.get();


      try {
        df.parse("2008/04/26");
      } catch (ParseException e) {
        e.printStackTrace();
      }


    }
  }

} 
class Worker2_ extends Thread {









  @Override
  public void run() {
    DateFormat df
      = new SimpleDateFormat("yyyy/MM/dd");
    for (int i = 0; i < 10000; i++) {



      try {
        df.parse("2008/04/26");
      } catch (ParseException e) {
        e.printStackTrace();
      }


    }
  }

}
class Worker1_ extends Thread {




  private final DateFormat df
    = new SimpleDateFormat("yyyy/MM/dd");



  @Override
  public void run() {


    for (int i = 0; i < 10000; i++) {



        try {
          df.parse("2008/04/26");
        } catch (ParseException e) {
          e.printStackTrace();
        }


    }
  }

}
2 ��310ms ��600ms ��260ms ��260ms ��210ms
3 ��390ms ��750ms ��300ms ��300ms ��250ms
10 ��1060ms ��2030ms 660�`900ms 660�`900ms 580�`600ms

���ԑ���́Astart()���Ă���join()���I���܂ł̎��ԁB���[�J�[�X���b�h���C���X�^���X�����鎞�Ԃ͊܂܂Ȃ��B
�‚܂�o�b�`�p�^�[���P��o�b�`�p�^�[���P�f��DateFormat���C���X�^���X�����鎞�Ԃ͎��Ԍv���Ɋ܂܂�Ă��Ȃ��B

��ʂɓ�������������΁A�p�^�[���P�ł͔r������đ҂�����������̂ɑ΂��A�p�^�[���Q�ł͂���͖����͂��B�Ȃ̂ɁA�p�^�[���P�̕��������B
�‚܂��r�������isynchronized�j��SimpleDateFormat�C���X�^���X�����قǂ̕��ׂ͂������Ă��Ȃ��ƍl������B
�iSimpleDateFormat�̃R���X�g���N�^�[�� �f�t�H���g���J�[���擾���̐F�X�ȏ������s���Ă���̂ŁA���������d���悤���j
�isynchronized�u���b�N�̒��̏����Ɏ��Ԃ�������悤�Ȃ� ���ʂ�����ւ�邩������Ȃ����A���Ȃ��Ƃ�SimpleDateFormat#parse()�͂���Ȃɏd���͖����悤���j
��new SimpleDateFormat()�ɂ����鎞�Ԃ�synchronized�ɂ����鎞�Ԃ̔�r

�p�^�[���Q�f�́A�p�^�[���Q�ɑ΂��A�X���b�h�̃��[�v�̑O�Ɉ�x�����X���b�h����SimpleDateFormat�𐶐����A���̃X���b�h���ł͂�����g���񂷁i���������Ĕr�����s�v�ȁj�p�^�[���B
SimpleDateFormat�̐����͈�x�����s��Ȃ����A�������Ƃ�K�v�������̂ōł������B�i�p�^�[���P�f�̓N���X�������̏�������SimpleDateFormat���C���X�^���X�����Ă���A�v�����Ԃɂ��ꂪ�܂܂�Ă��Ȃ������ŁA�����͓����j
�p�^�[���R�́AThreadLocal�N���X���g�����A�X���b�h���ɃC���X�^���X��ۗL����d�g�݁B�������̓X���b�h���Ɉ�x�����s���Ȃ��B���Ȃ킿�A����Ƃ��Ă̓p�^�[���Q�f�Ɠ����ł���A���s���x���قƂ�Ǔ����I
�o�b�`�ł�ThreadLocal���g��Ȃ��Ă��X���b�h���ɕϐ���ێ��ł���i�p�^�[���P�f�j���A�E�F�u�i�T�[�u���b�g�j�Ȃ�ƂĂ��L�����낤�B[2008-07-10]

�E�F�u�i�T�[�u���b�g�j�ł̓��[�v����Ƃ��������͂��܂薳���Ǝv���̂ŁA�ȉ��̂悤�ȃp�^�[���ɂȂ�Ǝv���B
�i�o�b�`�ɗႦ��΁A���L��doGet()�����[�v�ŌĂ΂��C���[�W�j

�E�F�u�p�^�[���P �E�F�u�p�^�[���Q �E�F�u�p�^�[���R
�S�̂ŋ��ʂ�DateFormat�𐶐�
��������i�������K�v�j
��������DateFormat�𐶐�
�����Ȃ��i�����͕s�v�j
ThreadLocal��DateFormat�𐶐�
�����Ȃ��i�����͕s�v�j[2008-07-10]
class Servlet1 extends HttpServlet {




  private final DateFormat df
    = new SimpleDateFormat("yyyy/MM/dd");



  @Override
  protected void doGet(�`) {


    synchronized (df) {
      try {
        df.parse("2008/04/26");
      } catch (ParseException e) {
        e.printStackTrace();
      }
    }
  }

}
class Servlet2 extends HttpServlet {









  @Override
  protected void doGet(�`) {
    DateFormat df
      = new SimpleDateFormat("yyyy/MM/dd");

    try {
      df.parse("2008/04/26");
    } catch (ParseException e) {
      e.printStackTrace();
    }

  }

}
class Servlet3 extends HttpServlet {

  private final ThreadLocal<DateFormat>
    dflocal = new ThreadLocal<DateFormat>() {
      @Override
      protected DateFormat initialValue() {
        return new SimpleDateFormat("yyyy/MM/dd");
      }
    };

  @Override
  protected void doGet(�`) {

    DateFormat df = dflocal.get();

    try {
      df.parse("2008/04/26");
    } catch (ParseException e) {
      e.printStackTrace();
    }

  }

} 
�o�b�`�p�^�[���P�ɑ��� �o�b�`�p�^�[���Q�ɑ��� �o�b�`�p�^�[���R�ɑ���

�Y������o�b�`�p�^�[���̎��s���Ԃ��l����΁A�E�F�u�p�^�[���R���ł����s�������ǂ��Ǝv����B�����Ńp�^�[���P�B[/2008-07-10]
�i�E�F�u�p�^�[���P��R�Ȃ�DateFormat�C���X�^���X���j������Ȃ��̂�GC�ɂ��e�����Ȃ����j

���E�F�u�p�^�[��1��df�́A�o�b�`�ƈ����static�ϐ��ł͂Ȃ����A�r������K�v�������B�Ȃ��Ȃ�A�T�[�u���b�g�ł�1�‚̃C���X�^���X�𕡐��X���b�h����Ăяo������B


java.util.Calendar

Calendar��Date�̉��H�E���Z���s���N���X�B
�N�E���E���E���E���E�b���•ʂɐݒ肵����擾������A���̒P�ʂʼn��Z�����茸�Z�����肷�邱�Ƃ��o����B
�iDate�̓^�C���]�[����ێ����Ă��Ȃ����jCalendar���^�C���]�[����ێ�����B[2016-05-30]�i��JDK1.8��ZonedDateTime�j


Calendar�C���X�^���X�̐���

Calendar�͒��ۃN���X�Ȃ̂ŁA�C���X�^���X�𐶐�����ɂ�getInstance()���Ăяo���B

	Calendar cal = Calendar.getInstance();	//���ݓ�����ێ������J�����_�[

��̓I�ɂ́ACalendar#getInstance()�̓f�t�H���g�ł�GregorianCalendar�C���X�^���X��Ԃ��B

������JDK1.6�ł́A�f�t�H���g���J�[�������{�ɂȂ��Ă���ꍇ��JapaneseImperialCalendar��Ԃ��B����͘a���������炵���B
���̃N���X��public����Ȃ��̂�Javadoc�͐�������ĂȂ��݂��������ǁA�\�[�X�������auther�͓��{�l���ۂ��B �������B
�ł��f�t�H���g�̃f�t�H���g���J�[����JapaneseImperialCalendar��Ԃ��悤�ȏ����ɂȂ��Ă��Ȃ��̂ŁA��ԊȒP�Ȃ̂̓��J�[���������Ŏw�肵�Ă�邱�Ƃ��ȁB

//�~	Locale loc = Locale.JAPAN;
//�~	Locale loc = Locale.JAPANESE;
	Locale loc = new Locale("ja", "JP", "JP");
	cal = Calendar.getInstance(loc);
	System.out.println(cal.getClass());

GregorianCalendar�̃R���X�g���N�^�[�𒼐ڌĂяo���ăC���X�^���X�𐶐����邱�Ƃ��o����B

	Calendar cal = new GregorianCalendar(year, month - 1, day);
	Calendar cal = new GregorianCalendar(year, month - 1, day, hour, minute, second);
	Calendar cal = new GregorianCalendar(year, month - 1, day, hour, minute, second, msec);

�^�C���]�[�����w�肷��ɂ͈ȉ��̂悤�ɂ���B[2016-05-30]

	Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Asia/Tokyo"));

Date�Ƃ̕ϊ�

Date�Ƃ̕ϊ��͈ȉ��̗l�ɂ���B

	Date date = �`;
	cal.setTime(date);
	Date date = cal.getTime();

Date�N���X�Ȃ̂�setTime()�EgetTime()�Ƃ́A����@���ɁH

�Ȃ��A�~���b��\�������ilong�^�j����Ĉ������Ƃ��o����B

	cal.setTimeInMillis(date.getTime());
	cal.setTimeInMillis(System.currentTimeMillis());
	Date date = new Date(cal.getTimeInMillis());

��Calendar�̓^�C���]�[����ێ����Ă��邪�ADate�͕ێ����Ă��Ȃ��iUTC�����j�B�~���b��long�l��UTC�����B�����������Ƃ��́ACalendar���̃^�C���]�[����/����ϊ������B[2016-05-30]


�J�����_�[�̐ݒ�E�擾

Calendar�̌X�̗v�f�i�N���������b�j������������������擾�����肷�邱�Ƃ��o����B

	int year = cal.get(Calendar.YEAR);
	cal.set(Calendar.YEAR, year);

���w�肷��萔

���������iMONTH�j�����́A���̂�0�`11�ň����悤�ɂȂ��Ă���B�i0��1���A11��12���j

	int month = cal.get(Calendar.MONTH) + 1;
	cal.set(Calendar.MONTH, month - 1);

���l�̐ݒ�/�擾�i����DATE�iDAY_OF_MONTH�j��HOUR�iHOUR_OF_DAY�j�j�ł́A�^�C���]�[�����l�������B[2016-05-30]


������x�܂Ƃ߂ăZ�b�g���郁�\�b�h������B

	cal.set(year, month - 1, day, hour, min, sec);

�������E������

���錎�̌��������擾����ɂ́AgetActualMaximum()���\�b�h���g���B[2008-02-17]

	Calendar cal = new GregorianCalendar(2008, 2 - 1, 15);
	int max = cal.getActualMaximum(Calendar.DATE);
	cal.set(Calendar.DATE, max);

getMaximum()�Ƃ������\�b�h�����邪�A����͂��̗�Ŏ�肤��ő�̒l��Ԃ��B
���Ȃ킿�O���S���I��iGregorianCalendar�j�ł�getMaximum(DATE)�͏��31��Ԃ��B
getActualMaximum()�͂��邤�N��2���Ȃ�29�A�����łȂ�2���Ȃ�28�A���̌���30��Ԃ��Ă����B

���l��getActualMinimum()��getMinimum()�Ƃ������\�b�h�����邪�A������͓��̏ꍇ�͏��1��Ԃ��̂ŁA�킴�킴�g��Ȃ��Ă������Ǝv���B

���Ȃ݂�getMaximum(YEAR)�̒l��292278994�i2��9�疜�j�������B
�‚܂肱��JRE���g��������ꍇ�A����2��9�疜�N��肪��������킯��(��)


�J�����_�[�̑���

Calendar�̌X�̗v�f�i�N���������b�j����ɁA�l�𑝌������邱�Ƃ��o����B

������ɑ���������̂́A�ȉ��̂悤�ɂȂ�B

	cal.add(Calendar.MONTH, +1);	//1�������₷
	cal.add(Calendar.MONTH, -1);	//1�������炷

12������1�����i�߂�ƔN��1�‘����A����1���ɂȂ�B
�t��1������1�����߂��ƔN��1�Œ���A����12���ɂȂ�B

add()�ł́A��ɂ����J�����_�[�t�B�[���h��菬�����t�B�[���h�͊�{�I�ɕς��Ȃ��B
�‚܂茎����ɂ����ꍇ�A��{�I�ɓ��i�₻��ȉ��̎����b�j�͕ς��Ȃ��B
�����������������ʁA���݂��Ȃ����ɂȂ����ꍇ�i�‚܂�5/31��4���ɂȂ�悤�ȏꍇ�j�A���݂��閖���ɂȂ�i5/31��4/30�j�B

//3�����猎��-1������i2008�N�͂��邤�N�j
2008-03-27 �� 2008-02-27
2008-03-28 �� 2008-02-28
2008-03-29 �� 2008-02-29
2008-03-30 �� 2008-02-29
2008-03-31 �� 2008-02-29

add()�łȂ�roll()���g���ƁA��ɂ����J�����_�[�t�B�[���h���傫���t�B�[���h���ς��Ȃ��B
�Ⴆ�Ό�����ɂ����ꍇ�A12������1���₷�ƁA�N�͕ς�炸��1���ɕς��B���ɂ‚��Ă�add()�Ɠ����B

	cal.roll(Calendar.MONTH, true);	//������1�������₷
	cal.roll(Calendar.MONTH, false);	//������1�������炷
	cal.roll(Calendar.MONTH, +1);	//������1�������₷
	cal.roll(Calendar.MONTH, -1);	//������1�������炷

������GregorianCalendar#roll()�́A���邤�N�Ɋւ��ăo�O������B
��Bug ID: 5014535 - incorrect rolling from leap-years

2/29�i���邤�N�j����g���邤�N�łȂ��N�h��YEAR�P�ʂ�roll()����ƁA�{����2/28�ɂȂ�ׂ��Ȃ̂�3/1�ɂȂ��Ă��܂��B

	Calendar cal = new GregorianCalendar(2008, 2 - 1, 29);
	System.out.println(cal.getTime());
	cal.roll(Calendar.YEAR, true);
	System.out.println(cal.getTime());
Fri Feb 29 00:00:00 JST 2008
Sun Mar 01 00:00:00 JST 2009

���Ȃ݂�add(YEAR)�̓o�O���Ă��Ȃ��B

	Calendar cal = new GregorianCalendar(2008, 2 - 1, 29);
	System.out.println(cal.getTime());
	cal.add(Calendar.YEAR, 1);
	System.out.println(cal.getTime());
Fri Feb 29 00:00:00 JST 2008
Sat Feb 28 00:00:00 JST 2009

�����2004�N�iJRE1.4.2�j�ɕ񍐂��ꂽ�o�O�ŁA�����Ă݂��JRE1.4.0�����������AJRE1.5��1.6�������Ă��Ȃ������B���u����Ă�񂾂낤���B
�ł��m����roll(YEAR)�Ȃ�Ďg��Ȃ��iadd(YEAR)�ő�։”\�A�Ƃ������add()���g���̂��f������ȁj�̂ŁA�ǁ[�ł������悤�ȋC�����Ă���(���)


�^�C���]�[��

Date#toString()�ŕ\������鎞���́A���{��PC�Ŏ��s�����ꍇ�͓��{���Ԃŕ\�������Ǝv���B[2010-05-27]
����́A�f�t�H���g�̃^�C���]�[�������{�ɂȂ��Ă���ׁB
�^�C���]�[����ς��Ă��ƁA�\�����e���ς��B �iDate���g�̓^�C���]�[����ێ����Ă��Ȃ����ADate#toString()�̓f�t�H���g�^�C���]�[�����g���Ă���B[2016-05-30]�j

��JDK1.8��ZoneId


���݂̃^�C���]�[���̊m�F���@

import java.util.TimeZone;
	TimeZone defaultZone = TimeZone.getDefault();
	System.out.println(defaultZone);
	System.out.println(defaultZone.getRawOffset() / (1000 * 60 * 60));

�����s��

sun.util.calendar.ZoneInfo[id="Asia/Tokyo",offset=32400000,dstSavings=0,useDaylight=false,transitions=10,lastRule=null]
9

�I�t�Z�b�g��32400000�~���b�́A9���ԁB


�f�t�H���g�^�C���]�[���̐ݒ���@

	Date date = new Date();	//���ݓ���
	System.out.println("�f�t�H���g�F" + date);

	TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));
	System.out.println("�A�����J�@�F" + date);

	TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
	System.out.println("GMT �@�@�@�F" + date);

	TimeZone.setDefault(defaultZone);
	System.out.println("���ɖ߂����F" + date);

�����s��

�f�t�H���g�FFri May 28 00:55:36 JST 2010
�A�����J�@�FThu May 27 08:55:36 PDT 2010
GMT �@�@�@�FThu May 27 15:55:36 GMT 2010
���ɖ߂����FFri May 28 00:55:36 JST 2010

Date#toString()�����Ńf�t�H���g�̃^�C���]�[�����Q�Ƃ��Ă���ׁA�����Date�C���X�^���X�ł�toString()�̏o�͕\�����ς���Ă���B
�iDate�C���X�^���X�����ŕێ����Ă��鎞���i����_����̌o�ߎ��ԁj�͕ς��킯�ł͂Ȃ��j


�܂��AJavaVM�N������VM�����Ɉȉ��̂悤�Ɏw�肷�邱�ƂŁA�f�t�H���g�̃^�C���]�[����ݒ肷�邱�Ƃ��o����B

> java -Duser.timezone=America/Los_Angeles jp.hishidama.example.TimeZoneExample

�^�C���]�[���Ɏw��ł���ID�̈ꗗ�́A�ȉ��̂悤�ɂ��Ď擾����B

	String[] ids = TimeZone.getAvailableIDs();
	for (String id : ids) {
		System.out.println(id);
	}

Java�ڎ��֖߂� / �V�@�\�֖߂� / �Z�p�����֖߂�
���[���̑��M��F�Ђ�����

�@

�@

�@

�@

�@

�@

�@

�@

�@

�@

�@

�@

�@

�@

�@

�@