代码之家  ›  专栏  ›  技术社区  ›  Cratylus

在Java中将时间戳(以毫秒为单位)转换为字符串格式的时间

  •  106
  • Cratylus  · 技术社区  · 14 年前

    我正试图转换一个长值( )格式截止时间 h:m:s:ms .

    我用作时间戳的长值是从字段中获取的 timestamp

    到目前为止,我尝试了以下方法,但失败了:

    logEvent.timeStamp/ (1000*60*60)
    TimeUnit.MILLISECONDS.toMinutes(logEvent.timeStamp)
    

    但我得到了错误的值:

    1289375173771 for logEvent.timeStamp
    358159  for logEvent.timeStamp/ (1000*60*60) 
    21489586 for TimeUnit.MILLISECONDS.toMinutes(logEvent.timeStamp)
    

    9 回复  |  直到 6 年前
        1
  •  178
  •   Derek Mahar    6 年前

    试试这个:

    Date date = new Date(logEvent.timeSTamp);
    DateFormat formatter = new SimpleDateFormat("HH:mm:ss.SSS");
    formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
    String dateFormatted = formatter.format(date);
    

    SimpleDateFormat

    runnable example 使用1200 ms的输入。

        2
  •  122
  •   Derek Mahar    6 年前
    long millis = durationInMillis % 1000;
    long second = (durationInMillis / 1000) % 60;
    long minute = (durationInMillis / (1000 * 60)) % 60;
    long hour = (durationInMillis / (1000 * 60 * 60)) % 24;
    
    String time = String.format("%02d:%02d:%02d.%d", hour, minute, second, millis);
    
        3
  •  34
  •   Basil Bourque    9 年前

    我将向您展示三种方法:(a)从长值中获取minute字段,(b)使用所需的日期格式打印它。一次使用 java.util.Calendar Joda-Time ,最后一个使用java 8和更高版本中内置的java.time框架。

    java.time框架取代了旧的捆绑日期时间类,它的灵感来源于Joda time,由JSR 310定义,并由ThreeTen Extra项目扩展。

    java.time框架是使用Java8及更高版本的方法。否则,比如Android,使用Joda Time。众所周知,java.util.Date/.Calendar类非常麻烦,应该避免使用。

    java.util.Date&日历

    final long timestamp = new Date().getTime();
    
    // with java.util.Date/Calendar api
    final Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(timestamp);
    // here's how to get the minutes
    final int minutes = cal.get(Calendar.MINUTE);
    // and here's how to get the String representation
    final String timeString =
        new SimpleDateFormat("HH:mm:ss:SSS").format(cal.getTime());
    System.out.println(minutes);
    System.out.println(timeString);
    

    // with JodaTime 2.4
    final DateTime dt = new DateTime(timestamp);
    // here's how to get the minutes
    final int minutes2 = dt.getMinuteOfHour();
    // and here's how to get the String representation
    final String timeString2 = dt.toString("HH:mm:ss:SSS");
    System.out.println(minutes2);
    System.out.println(timeString2);
    

    输出:

    24个
    09:24:10:254
    24个
    09:24:10:254

    long millisecondsSinceEpoch = 1289375173771L;
    Instant instant = Instant.ofEpochMilli ( millisecondsSinceEpoch );
    ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , ZoneOffset.UTC );
    
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "HH:mm:ss:SSS" );
    String output = formatter.format ( zdt );
    
    System.out.println ( "millisecondsSinceEpoch: " + millisecondsSinceEpoch + " instant: " + instant + " output: " + output );
    

    毫秒历元:1289375173771瞬间:2010-11-10T07:46:13.771Z输出:07:46:13:771

        4
  •  19
  •   YoCha    11 年前

    可以使用apache commons(commons-lang3)及其DurationFormatUtils类。

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.1</version>
    </dependency>
    

    例如:

    String formattedDuration = DurationFormatUtils.formatDurationHMS(12313152);
    // formattedDuration value is "3:25:13.152"
    String otherFormattedDuration = DurationFormatUtils.formatDuration(12313152, DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN);
    // otherFormattedDuration value is "P0000Y0M0DT3H25M13.152S"
    

    希望它能帮助。。。

        5
  •  8
  •   Lo Ka    10 年前
    long second = TimeUnit.MILLISECONDS.toSeconds(millis);
    long minute = TimeUnit.MILLISECONDS.toMinutes(millis);
    long hour = TimeUnit.MILLISECONDS.toHours(millis);
    millis -= TimeUnit.SECONDS.toMillis(second);
    return String.format("%02d:%02d:%02d:%d", hour, minute, second, millis);
    
        6
  •  5
  •   Vivek Pal    10 年前
    public static String timeDifference(long timeDifference1) {
    long timeDifference = timeDifference1/1000;
    int h = (int) (timeDifference / (3600));
    int m = (int) ((timeDifference - (h * 3600)) / 60);
    int s = (int) (timeDifference - (h * 3600) - m * 60);
    
    return String.format("%02d:%02d:%02d", h,m,s);
    
        7
  •  4
  •   Nico Huysamen    14 年前

    logEvent.timeStamp / (1000*60*60)
    

    logEvent.timeStamp / (1000*60)
    

    最后你会得到和

    TimeUnit.MILLISECONDS.toMinutes(logEvent.timeStamp)
    
        8
  •  4
  •   LeoZao    9 年前

    试试这个:

        String sMillis = "10997195233";
        double dMillis = 0;
    
        int days = 0;
        int hours = 0;
        int minutes = 0;
        int seconds = 0;
        int millis = 0;
    
        String sTime;
    
        try {
            dMillis = Double.parseDouble(sMillis);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    
    
        seconds = (int)(dMillis / 1000) % 60;
        millis = (int)(dMillis % 1000);
    
        if (seconds > 0) {
            minutes = (int)(dMillis / 1000 / 60) % 60;
            if (minutes > 0) {
                hours = (int)(dMillis / 1000 / 60 / 60) % 24;
                if (hours > 0) {
                    days = (int)(dMillis / 1000 / 60 / 60 / 24);
                    if (days > 0) {
                        sTime = days + " days " + hours + " hours " + minutes + " min " + seconds + " sec " + millis + " millisec";
                    } else {
                        sTime = hours + " hours " + minutes + " min " + seconds + " sec " + millis + " millisec";
                    }
                } else {
                    sTime = minutes + " min " + seconds + " sec " + millis + " millisec";
                }
            } else {
                sTime = seconds + " sec " + millis + " millisec";
            }
        } else {
            sTime = dMillis + " millisec";
        }
    
        System.out.println("time: " + sTime);
    
        9
  •  0
  •   Joel Richard Koett Abhilash RS    6 年前
        long hours = TimeUnit.MILLISECONDS.toHours(timeInMilliseconds);
        long minutes = TimeUnit.MILLISECONDS.toMinutes(timeInMilliseconds - TimeUnit.HOURS.toMillis(hours));
        long seconds = TimeUnit.MILLISECONDS
                .toSeconds(timeInMilliseconds - TimeUnit.HOURS.toMillis(hours) - TimeUnit.MINUTES.toMillis(minutes));
        long milliseconds = timeInMilliseconds - TimeUnit.HOURS.toMillis(hours)
                - TimeUnit.MINUTES.toMillis(minutes) - TimeUnit.SECONDS.toMillis(seconds);
        return String.format("%02d:%02d:%02d:%d", hours, minutes, seconds, milliseconds);