Java Unix Time

Java Unix Time – lấy và sử dụng, thực thi

Java Unix Time – lấy và sử dụng, thực thi

Qua bài viết này: http://sethphat.com/sp-257/unix-time-la-gi-loi-khi-su-dung-unix-time

Mình sẽ tiếp tục hướng dẫn các bạn sử dụng Unix Time trên Java 😀

1/ Java Unix Time – Lấy Unix Time hiện tại:

Java đã xây dựng sẵn hàm này trong System, nhưng chúng ta cần chỉnh 1 chút để lấy Unix Time như sau 😀

// Lấy unixTime Java, thời gian hiện tại
long nowTime = System.currentTimeMillis() / 1000L;

1000L cũng như 1000 thôi, để vậy để cho nó thành Long ý mà 😀

Giải thích: Vì Java lấy thời gian hiện tại mà theo Miliseconds nên chúng ta cần chia 1000 để lấy ra giây => Unix Time.

Chúng ta có thể dựng hàm để sử dụng như PHP:

public long time() {
	long time = System.currentTimeMillis() / 1000L;
	return time;
}

2/ Chuyển Java Unix Time thành ngày(String):

Cũng cực kì đơn giản, chúng ta đã có class DateSimpleDateFormat hỗ trợ vụ này:

Date dt = new Date(time);
SimpleDateFormat sp = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
String date = sp.format(dt);

Lưu ý là SimpleDateFormat sẽ lấy Format như Windows nhé (Xem toàn bộ tại đây: https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx)

Như VD trên thì mình sẽ có được: 07/05/2017 19:01:38

Và chúng ta cũng có thể build luôn hàm date() như PHP như sau:

public String date(String type,long time) {
	Date dt;
	
	if (time > 0)
		dt = new Date(time);
	else
		dt = new Date(time());

	SimpleDateFormat sp = new SimpleDateFormat(type);
		
	return sp.format(dt);
}

Vì Java không có tham số mặc định khi khởi tạo, cho nên ta phải sử dụng 2 cách như sau:

  • date(type_của_bạn, time_đã_có); // lấy theo thời gian đã chọ
  • date(type_của_bạn, 0); // tự động lấy thời gian hiện tại

3/ Tạo Java Unix time theo ý muốn (mkTime)

Với PHP, ta có hàm mkTime, với Java, chúng ta cũng có thể làm dc thông qua class LocalDateTime.

Do Class DateTime của Java bị deprecated nhiều quá nên chúng ta cần fải thông qua 1 thằng khác 😀

int month = 7;
int day = 5;
int year = 2017;

LocalDateTime localDateTime = LocalDateTime.of(year, month, day, 0, 0, 0);
System.out.println(localDateTime.toInstant(ZoneOffset.ofTotalSeconds(0)).toEpochMilli() / 1000L);

Và để suy ra hàm mkTime thì như sau:

	public long mktime(int day, int month, int year, int hour, int minute, int second) {
		LocalDateTime localDateTime = LocalDateTime.of(year, month, day, hour, minute, second);
		return localDateTime.toInstant(ZoneOffset.ofTotalSeconds(0)).toEpochMilli() / 1000L;
	}

Vì Java ko có khởi tạo mặc định cho tham số truyền vào, các bạn chịu khó truyền vào 0 ở chỗ ko muốn xài nhé 😀

VD: mktime(7, 5, 2017, 23, 59, 59);

Lưu ý: sử dụng giờ ở dạng 0-23.

4/ Tạo Java Unix Time cho các mốc thời gian đặc biệt

Có 2 mốc mình sẽ nói tới là Ngày hôm nay, Ngày đầu tuần và ngày đầu tháng (đều ở mốc 0:00:00)

Về vụ này, chúng ta fải xài qua 1 Class khác nữa là Calendar của Java.

A) Ngày hôm nay

// Sử dụng calendar
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0); // ! clear sẽ ko clear dc giờ
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);

// Lấy unixTime
long startDay = cal.getTimeInMillis() / 1000L;

B) Ngày đầu tuần

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0); // ! clear sẽ ko clear dc giờ
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);

// Set ngày đầu tiên của tuần
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());

long startDay = cal.getTimeInMillis() / 1000L;

C) Ngày đầu tháng

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0); // ! clear sẽ ko clear dc giờ
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);

// Set ngày đầu tháng
cal.set(Calendar.DAY_OF_MONTH, 1);

// Unix Time
long startDay = cal.getTimeInMillis() / 1000L;

Ngoài ra còn nhiều cách lấy Unix Time nữa, để các bạn tự tìm hiểu sau hơn nhé.

Như bên trên thì chúng ta đã có thể sử dụng đa số là đầy đủ rồi 😀

Cám ơn các bạn đã quan tâm!

facebook
Seth Phát

Seth Phát

Mình là Phát - biệt danh Seth Phát. Hiện đang là một Sr. Full-Stack Engineer. Mình là một người yêu thích và đam mê lập trình và hiện tại đang theo về phần Web là chủ yếu. Mạnh Back-end và khá Front-end, vẫn đang theo đều cả 2 :v. Còn gì bằng khi được làm những thứ mà mình yêu thích, đam mê ;)

Bình luận qua Facebook