时间戳转时间 java_如何用java实现时间戳跟时间的转换(不使用库函数)?

看了这些已经存在的回答,真的是无Fu*k说,觉得无聊呢可以不回答啊。

既然你问了这个问题,证明你是个编程方面的新手,但是我很鼓励你有这种想法,因为我曾经也有过类似的想法。这个问题本身并不是很难,只不过要达到类似于库函数那样效果的话考虑的东西比较多,下面我用比较简单的方式实现一个MyDateTime类,该类提供一个从时间戳获取MyDateTime对象的静态方法fromTimestamp,逻辑比较简单,不考虑时区,即转换得到的时间还是格林威治时间。

开始之前需要说明的是本人不是专业的Java开发者,Java只是大概看过一些,所以就不要挑剔代码写的怎么样了,程序思想最重要不是么?

import java.util.function.Function;

public class MyDateTime {

private int year;

private int month;

private int day;

private int hour;

private int minute;

private int second;

public int getYearValue(){

return year;

}

public int getMonthValue(){

return month;

}

public int getDayValue(){

return day;

}

public int getHourValue(){

return hour;

}

public int getMinuteValue(){

return minute;

}

public int getSecondValue(){

return second;

}

@Override

public String toString() {

return String.format("%d/%d/%d-%d:%d:%d", year,month,day,hour,minute,second);

}

public static MyDateTime fromTimestamp(long timeStamp){

MyDateTime dt = new MyDateTime();

long minutes = timeStamp / 60;

dt.second = (int)(timeStamp % 60);

long hours = minutes / 60;

dt.minute = (int)(minutes % 60);

long days = hours / 24;

dt.hour = (int)(hours % 24);

Function isLeapYear = y -> (y % 4 == 0 && y % 100 != 0) || y %400 == 0;

//年份累计

int year = 1970;

long restDays = days;

while(true){

int daysOfYear = isLeapYear.apply(year)? 366 : 365;

if(restDays

break;

}

restDays -= daysOfYear;

year++;

}

dt.year = year;

int[] daysOfMonth = {31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

daysOfMonth[1] = isLeapYear.apply(dt.year)? 29 : 28;

for(int i=0; i < daysOfMonth.length; i++){

if(restDays < daysOfMonth[i]){

dt.month = i + 1;

break;

}

restDays -= daysOfMonth[i];

}

dt.day = (int)restDays;

if(dt.hour>0 || dt.minute>0 || dt.second>0){

//多出来的一天

dt.day += 1;

}

return dt;

}

}

最后要说的是有想法是好的,但还是建议多了解语言配套的生态,用起来才能更得心应手。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值