Java中格林尼治时间和时间戳的相互转换

简介: Java中格林尼治时间和时间戳的相互转换

首先,将格林尼治时间转换为时间戳:

/**
 * 格林尼治时间转换为时间戳
 */
public static long iso8601FormateTimeToLong(String time){
  String formateTime = iso8601ToCustomerDate(time,"yyyy年M月d日 HH:mm:ss");
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy年M月d日 HH:mm:ss");
  Date date = null;
  try {
    date = sdf.parse(formateTime);
  } catch (ParseException e) {
    MXLog.e(MXLog.APP_WARN, e);
  }
  return date.getTime();
  }

然后是时间戳转为格林尼治时间:


/**
  * 时间戳转成本机时区的格林尼治时间
  * @param date
  * @return
  */
  public static String dateLongToiso8601(long date) {
  DateTime dateTime = new DateTime(date);
  return dateTime.toString("yyyy-MM-dd'T'HH:mm:ssZ");
  }

根据时间戳判断距离当前时间的时间,和微信朋友圈中的时间类似,其实原理很简单,通过传入的时间和当前时间作比较即可:

/**
     *  时间
     *  1)0-1min      刚刚
     *  2)1-60min     xx分钟前,如3分钟前
     *  3)1-24h        xx小时前,如2小时前
     *  4)昨天的       昨天+时+分,如,昨天 05:30
     *  5)昨天之前的   月+日+时+分,如,1月3日 05:30
     *  6)非本年       年+月+日+时+分,如2017年1月12日 05:30
     *
     * @param context
     * @param time
     * @return
     */
    public static String formateTime3(Context context,long time){
        boolean isTodayMessage = false;
        Calendar todayBegin = Calendar.getInstance();
        todayBegin.set(Calendar.HOUR_OF_DAY, 0);
        todayBegin.set(Calendar.MINUTE, 0);
        todayBegin.set(Calendar.SECOND, 0);
        Calendar todayEnd = Calendar.getInstance();
        todayEnd.set(Calendar.HOUR_OF_DAY, 23);
        todayEnd.set(Calendar.MINUTE, 59);
        todayEnd.set(Calendar.SECOND, 59);
        Calendar messageTime = Calendar.getInstance();
        messageTime.setTime(new Date(time));
        if (messageTime.before(todayEnd) && messageTime.after(todayBegin)) {
            isTodayMessage = true;
        }
        SimpleDateFormat formatter = null;
        int year = messageTime.get(Calendar.YEAR);
        Calendar currentCalendar = Calendar.getInstance();
        currentCalendar.setTime(new Date(System.currentTimeMillis()));
        int currentYear = currentCalendar.get(Calendar.YEAR);
        if (isTodayMessage) {
            long currentTime = System.currentTimeMillis();
            long duration = currentTime - time;
            if (duration < 60 * 1000 && duration >= 0) {
                //60s以内
                return "刚刚";
            } else if (duration >= 60 * 1000 && duration < 60 * 60 * 1000 ) {
                //大于1分钟,小于1小时
                return duration /60 /1000 + "分钟前";
            } else if (duration >= 3600 * 1000 && duration < 3600 * 24 * 1000) {
                //大于1小时
                return duration / 3600 /1000 + "小时前";
            }
        }else if (isYesterday(time)){
            formatter = new SimpleDateFormat("HH:mm");
            return "昨天" + formatter.format(messageTime.getTime());
        }else if (year != currentYear){
            formatter = new SimpleDateFormat("yyyy年M月d日 HH:mm");
        }else {
            formatter = new SimpleDateFormat("M月d日 HH:mm");
        }
        if (formatter == null){
            return "刚刚";
        }else{
            return formatter.format(messageTime.getTime());
        }
    }


 


目录
相关文章
|
3月前
|
Java API
Java时间戳教程
本文详细介绍Java中时间戳的处理方法,包括获取当前时间戳、使用`java.time`包、时间戳与日期的相互转换及格式化等。示例代码展示了如何利用`System.currentTimeMillis()`和`java.time.Instant`获取时间戳,以及如何通过`Date`和`ZonedDateTime`进行日期转换和时区处理。随着Java 8引入的`java.time`包,日期时间操作变得更加强大和便捷,推荐在新项目中优先采用。
245 8
|
5月前
|
SQL Java Unix
Android经典面试题之Java中获取时间戳的方式有哪些?有什么区别?
在Java中获取时间戳有多种方式,包括`System.currentTimeMillis()`(毫秒级,适用于日志和计时)、`System.nanoTime()`(纳秒级,高精度计时)、`Instant.now().toEpochMilli()`(毫秒级,ISO-8601标准)和`Instant.now().getEpochSecond()`(秒级)。`Timestamp.valueOf(LocalDateTime.now()).getTime()`适用于数据库操作。选择方法取决于精度、用途和时间起点的需求。
77 3
|
5月前
|
Java 数据库
使用java.sql.Timestamp处理时间戳
使用java.sql.Timestamp处理时间戳
|
6月前
|
Java 存储 数据库
如何用JAVA基于时间戳回放历史数据?
如何用JAVA基于时间戳回放历史数据?
122 4
|
6月前
|
安全 Java 测试技术
滚雪球学Java(51):掌握Java Date类:用法、弊端与时间戳转换技巧,助你轻松处理日期时间
【6月更文挑战第5天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
103 0
|
6月前
|
Java API
Java代码如何将时间戳转换为时间
【6月更文挑战第27天】Java代码如何将时间戳转换为时间
97 0
|
7月前
|
关系型数据库 MySQL Java
Java时间转换为MySQL中的INT类型时间戳
Java时间转换为MySQL中的INT类型时间戳
|
7月前
|
Java
Java中时间戳转换为时间
Java中将时间戳转为日期时间字符串示例:
47 0
|
7月前
|
存储 Java
35、Java 中的 Math 类、Random 随机数、UUID、格式化字符串或数字、字符串和数字的相互转换、高精度计算、BigDecimal、计算机中的浮点数都是近似值
35、Java 中的 Math 类、Random 随机数、UUID、格式化字符串或数字、字符串和数字的相互转换、高精度计算、BigDecimal、计算机中的浮点数都是近似值
106 0