时间戳转时间,非底层库

简介: 时间戳转时间,非底层库
package com.smartlab.myapplication;
import android.os.Build;
import androidx.annotation.RequiresApi;
import java.util.function.Function;
public class TimeHelp {
    private int year;
    private int month;
    private int day;
    private int hour;
    private int minute;
    private int second;
    public int getYear() {
        return year;
    }
    public void setYear(int year) {
        this.year = year;
    }
    public int getMonth() {
        return month;
    }
    public void setMonth(int month) {
        this.month = month;
    }
    public int getDay() {
        return day;
    }
    public void setDay(int day) {
        this.day = day;
    }
    public int getHour() {
        return hour;
    }
    public void setHour(int hour) {
        this.hour = hour;
    }
    public int getMinute() {
        return minute;
    }
    public void setMinute(int minute) {
        this.minute = minute;
    }
    public int getSecond() {
        return second;
    }
    public void setSecond(int second) {
        this.second = second;
    }
    @Override
    public String toString() {
        return String.format("%d年%d月%d日%d时%d分%d秒", year, month, day, hour, minute, second);
    }
    @RequiresApi(api = Build.VERSION_CODES.N)
    public static TimeHelp foo(int timestamp) {
        TimeHelp dt = new TimeHelp();
        long minutes = timestamp / 60;
        dt.second = (int) (timestamp % 60);
        long hours =8+(minutes / 60);   // 格林威治时间比北京时间晚8小时,必须加8
        dt.minute = (int) (minutes % 60);
        long days = hours / 24;
        dt.hour = (int) (hours % 24);
        Function<Integer, Boolean> 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 < daysOfYear)
                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;
    }
}
相关文章
|
3月前
|
数据库 开发者
|
6月前
|
Go Unix 开发者
Go语言time库,时间和日期相关的操作方法
Go语言time库,时间和日期相关的操作方法
98 0
Go语言time库,时间和日期相关的操作方法
|
6月前
Qt 时间戳和时间相关的转换操作
Qt 时间戳和时间相关的转换操作
251 0
|
6月前
|
Unix 定位技术
什么是时间戳?时间戳的获取方式
什么是时间戳?时间戳的获取方式
|
JSON 小程序 JavaScript
小程序返回的时间戳转化成时间
小程序返回的时间戳转化成时间
50 0
|
Linux
time模块: 时间戳、结构化时间、格式化时间的获取与相互转化
time模块: 时间戳、结构化时间、格式化时间的获取与相互转化
122 0
|
存储 关系型数据库 MySQL
MySQL存储时间是存时间戳和还是年月日时分秒格式的时间好?底层原理是什么?
MySQL存储时间是存时间戳和还是年月日时分秒格式的时间好?底层原理是什么?
939 1
在线时间戳转换工具的坑-同样的时间戳转为北京时间,转换结果受本机时区设置的影响...
在线时间戳转换工具的坑-同样的时间戳转为北京时间,转换结果受本机时区设置的影响...
277 0
时间戳2038问题是什么?如何解决这个问题?底层原理是什么?
时间戳2038问题是什么?如何解决这个问题?底层原理是什么?
1746 0