Làm thế nào để chuyển đổi phút sang Giờ và phút (hh: mm) trong java


Câu trả lời:


193

Nếu thời gian của bạn nằm trong một biến được gọi là t

int hours = t / 60; //since both are ints, you get an int
int minutes = t % 60;
System.out.printf("%d:%02d", hours, minutes);

Nó không thể dễ dàng hơn


Có cách nào để đạt được điều này với Java 8 Durationkhông?
IgorGanapolsky

2
Nếu tcó thể là <0(âm) thì dòng thứ hai phải là int minutes = Math.abs(t) % 60;.
phù thủy

1
và cũng có thể nếu bạn muốn am hoặc pm với thời gian, hãy thêm điều kiện này String amOrPm; if (timeInminutes> = 720) amOrPm = "PM"; else amOrPm = "AM"; Chuỗi chuyển đổi Thời gian = giờ + ":" + phút + amOrPm;
SFAH

Làm gì với ngôn ngữ không phải SA / CH? Đây chỉ là giải pháp từng phần, không cục bộ.
ror

28

tl; dr

Duration.ofMinutes( 260L )
        .toString()

PT4H20M

… hoặc là …

LocalTime.MIN.plus( 
    Duration.ofMinutes( 260L ) 
).toString()

04:20

Duration

Các lớp java.time bao gồm một cặp lớp để đại diện cho các khoảng thời gian. Các Durationlớp học là hàng giờ-phút-giây, và Periodlà trong nhiều năm-tháng-ngày.

Duration d = Duration.ofMinutes( 260L );

Duration các bộ phận

Truy cập từng phần của Durationbằng cách gọi to…Part. Các phương thức này đã được thêm vào trong Java 9 trở lên.

long days = d.toDaysPart() ;
int hours = d.toHoursPart() ;
int minutes = d.toMinutesPart() ;
int seconds = d.toSecondsPart() ;
int nanos = d.toNanosPart() ;

Sau đó, bạn có thể lắp ráp chuỗi của riêng bạn từ những phần đó.

ISO 8601

Các tiêu chuẩn ISO 8601 định nghĩa tiêu chuẩn văn bản định dạng cho giá trị ngày thời gian. Đối với các khoảng thời gian không gắn liền với dòng thời gian, định dạng tiêu chuẩnPnYnMnDTnHnMnS. Các Pdấu hiệu đánh dấu sự bắt đầu và Tphân tách năm-tháng-ngày với giờ-phút-giây. Vì vậy, một giờ rưỡi là PT1H30M.

Các lớp java.time sử dụng các định dạng ISO 8601 theo mặc định để phân tích cú pháp và tạo chuỗi. Các DurationPeriodcác lớp sử dụng định dạng tiêu chuẩn cụ thể này. Vì vậy, chỉ cần gọi toString.

String output = d.toString(); 

PT4H20M

Để định dạng thay thế, hãy xây dựng Chuỗi của riêng bạn trong Java 9 trở lên ( không phải trong Java 8) bằng các Duration::to…Partphương pháp. Hoặc xem Câu trả lời này để sử dụng regex để thao tác với chuỗi được định dạng ISO 8601.

LocalTime

Tôi thực sự khuyên bạn nên sử dụng định dạng ISO 8601 tiêu chuẩn thay vì định dạng đồng hồ cực kỳ mơ hồ và khó hiểu của 04:20. Nhưng nếu bạn nhấn mạnh, bạn có thể nhận được hiệu ứng này bằng cách hack với LocalTimelớp. Điều này hoạt động nếu thời lượng của bạn không quá 24 giờ.

LocalTime hackUseOfClockAsDuration = LocalTime.MIN.plus( d );
String output = hackUseOfClockAsDuration.toString();

04:20


Giới thiệu về java.time

Các java.time khung được xây dựng vào Java 8 và sau đó. Những lớp học thay thế cái cũ phiền hà di sản lớp học ngày thời gian như java.util.Date, Calendar, & SimpleDateFormat.

Các Joda thời gian dự án, bây giờ trong chế độ bảo trì , khuyên chuyển đổi sang các java.time lớp.

Để tìm hiểu thêm, hãy xem Hướng dẫn Oracle . Và tìm kiếm Stack Overflow cho nhiều ví dụ và giải thích. Đặc điểm kỹ thuật là JSR 310 .

Lấy các lớp java.time ở đâu?

  • Java SE 8 SE 9 trở lên
    • Được xây dựng trong.
    • Một phần của API Java tiêu chuẩn với một triển khai đóng gói.
    • Java 9 bổ sung một số tính năng nhỏ và các bản sửa lỗi.
  • Java SE 6 SE 7
    • Phần lớn chức năng của java.time được chuyển ngược sang Java 6 & 7 trong ThreeTen-Backport .
  • Android

Các ThreeTen-Extra dự án mở rộng java.time với các lớp bổ sung. Dự án này là cơ sở chứng minh cho những bổ sung có thể có trong tương lai cho java.time. Bạn có thể tìm thấy một số các lớp học hữu ích ở đây chẳng hạn như Interval, YearWeek, YearQuarter, và nhiều hơn nữa .


1
Rất vui, tôi đang tìm một cái gì đó như thế này, nhưng tôi muốn nhận kết quả là "4 giờ 20 phút" hoặc "4 giờ 20 phút" hơn là "PT4H20M" hoặc "04:20". Tôi đoán tôi sẽ phải sử dụng một số loại phương pháp định dạng?
aditsu bỏ vì SE là ÁC

@aditsuquitbecauseSEisEVIL Java 9 đã đưa các Duration::to…Partphương pháp hiển thị các chỉnh sửa của tôi cho Câu trả lời này. Bạn có thể dễ dàng lắp ráp chuỗi của riêng bạn từ các bộ phận đó.
Basil Bourque

12

Bạn cũng có thể sử dụng lớp TimeUnit . Bạn có thể xác định

private static final String FORMAT = "% 02d:% 02d:% 02d";
có thể có một phương pháp như:

public static String parseTime (mili giây dài) {
      return String.format (ĐỊNH DẠNG,
              TimeUnit.MILLISECONDS.đếnHours (mili giây),
              TimeUnit.MILLISECONDS.toMinutes (mili giây) - TimeUnit.HOURS.toMinutes (
              TimeUnit.MILLISECONDS. đếnHours (mili giây)),
              TimeUnit.MILLISECONDS.toSeconds (mili giây) - TimeUnit.MINUTES.toSeconds (
              TimeUnit.MILLISECONDS.toMinutes (mili giây)));
   }

Tôi biết nó dài hơn một chút so với mã trong câu trả lời được chấp nhận, nhưng IMHO nó cũng rõ ràng hơn. Tôi thích điều này.
Ole VV

9

Sử dụng java.text.SimpleDateFormatđể chuyển đổi phút thành giờ và phút

SimpleDateFormat sdf = new SimpleDateFormat("mm");

try {
    Date dt = sdf.parse("90");
    sdf = new SimpleDateFormat("HH:mm");
    System.out.println(sdf.format(dt));
} catch (ParseException e) {
    e.printStackTrace();
}

3

Nó có thể được thực hiện như thế này

        int totalMinutesInt = Integer.valueOf(totalMinutes.toString());

        int hours = totalMinutesInt / 60;
        int hoursToDisplay = hours;

        if (hours > 12) {
            hoursToDisplay = hoursToDisplay - 12;
        }

        int minutesToDisplay = totalMinutesInt - (hours * 60);

        String minToDisplay = null;
        if(minutesToDisplay == 0 ) minToDisplay = "00";     
        else if( minutesToDisplay < 10 ) minToDisplay = "0" + minutesToDisplay ;
        else minToDisplay = "" + minutesToDisplay ;

        String displayValue = hoursToDisplay + ":" + minToDisplay;

        if (hours < 12)
            displayValue = displayValue + " AM";
        else
            displayValue = displayValue + " PM";

        return displayValue;
    } catch (Exception e) {
        LOGGER.error("Error while converting currency.");
    }
    return totalMinutes.toString();

1
Gosh, đó là tiết - giống như FizzBuzz Enterprise Edition: theospears.com/blog/2007/08/11/fizzbuzz-enterprise-edition
ya23

1
long d1Ms=asa.getTime();   
long d2Ms=asa2.getTime();   
long minute = Math.abs((d1Ms-d2Ms)/60000);   
int Hours = (int)minute/60;     
int Minutes = (int)minute%60;     
stUr.setText(Hours+":"+Minutes); 

hai bên trên sẽ áp dụng các con số đặt trước
nhà phát triển

1

Hãy thử mã này:

import java.util.Scanner;

public class BasicElement {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        int hours;
        System.out.print("Enter the hours to convert:");
        hours =input.nextInt();
        int d=hours/24;
        int m=hours%24;
        System.out.println(d+"days"+" "+m+"hours");     

    }
}

Nó là từ phút đến giờ và phút
keyer

1

Đầu vào được cung cấp trong vài giây, bạn có thể chuyển đổi sang định dạng hh: mm: ss như sau:

int hours;
int minutes;
int seconds;
int formatHelper;

int input;


//formatHelper maximum value is 24 hours represented in seconds

formatHelper = input % (24*60*60);

//for example let's say format helper is 7500 seconds

hours = formatHelper/60*60;
minutes = formatHelper/60%60;
seconds = formatHelper%60;

//now operations above will give you result = 2hours : 5 minutes : 0 seconds;

Tôi đã sử dụng formatHelper vì đầu vào có thể dài hơn 86 400 giây, tức là 24 giờ.

Nếu bạn muốn tổng thời gian nhập của mình được biểu thị bằng hh: mm: ss, bạn chỉ cần tránh formatHelper.

Tôi hy vọng nó sẽ giúp.


1

Tôi sử dụng chức năng này cho các dự án của mình:

 public static String minuteToTime(int minute) {
    int hour = minute / 60;
    minute %= 60;
    String p = "AM";
    if (hour >= 12) {
        hour %= 12;
        p = "PM";
    }
    if (hour == 0) {
        hour = 12;
    }
    return (hour < 10 ? "0" + hour : hour) + ":" + (minute < 10 ? "0" + minute : minute) + " " + p;
}

1

(Trong Kotlin) Nếu bạn định đặt câu trả lời vào TextView hoặc thứ gì đó, thay vào đó bạn có thể sử dụng tài nguyên chuỗi:

<string name="time">%02d:%02d</string>

Và sau đó, bạn có thể sử dụng tài nguyên Chuỗi này để đặt văn bản tại thời điểm chạy bằng cách sử dụng:

private fun setTime(time: Int) {
    val hour = time / 60
    val min = time % 60
    main_time.text = getString(R.string.time, hour, min)
}

1

Đây là chức năng của tôi để chuyển đổi a second, millisecondthànhday,hour,minute,second

public static String millisecondToFullTime(long millisecond) {
    return timeUnitToFullTime(millisecond, TimeUnit.MILLISECONDS);
}

public static String secondToFullTime(long second) {
    return timeUnitToFullTime(second, TimeUnit.SECONDS);
}

public static String timeUnitToFullTime(long time, TimeUnit timeUnit) {
    long day = timeUnit.toDays(time);
    long hour = timeUnit.toHours(time) % 24;
    long minute = timeUnit.toMinutes(time) % 60;
    long second = timeUnit.toSeconds(time) % 60;
    if (day > 0) {
        return String.format("%dday %02d:%02d:%02d", day, hour, minute, second);
    } else if (hour > 0) {
        return String.format("%d:%02d:%02d", hour, minute, second);
    } else if (minute > 0) {
        return String.format("%d:%02d", minute, second);
    } else {
        return String.format("%02d", second);
    }
}

Thử nghiệm

public static void main(String[] args) {
    System.out.println("60 => " + secondToFullTime(60));
    System.out.println("101 => " + secondToFullTime(101));
    System.out.println("601 => " + secondToFullTime(601));
    System.out.println("7601 => " + secondToFullTime(7601));
    System.out.println("36001 => " + secondToFullTime(36001));
    System.out.println("86401 => " + secondToFullTime(86401));
}

Đầu ra

60 => 1:00
101 => 1:41
601 => 10:01
7601 => 2:06:41
36001 => 10:00:01
86401 => 1day 00:00:01

Hy vọng nó sẽ giúp



0

bạn đã quên tầng trong câu trả lời của bạn:

int hours = Math.floor(t / 60); 
int minutes = t % 60;

System.out.printf("%d:%02d", hours, minutes);

nếu không có nó, kết quả của bạn là sai trong trường hợp chắc chắn như ví dụ:

t = 525
hours = 8.75 

do đó nếu không có Math.floor chúng ta có kết quả này: 9h45 thay vì 8h45.


2
Không, nó sẽ không (trừ khi bạn sử dụng phao để đếm giây ...). Khi truyền 8,75 thành int, phần thập phân được cắt bớt, không được làm tròn.
ya23

0

tính số phút bằng cách sử dụng mã này:

long difference = new Date().getTime() - user.getUpdatedDate().getTime(); 
        int minutes = (int) TimeUnit.MILLISECONDS.toMinutes(difference);

0

Trong Swift

func timeStringFrom(minutes:Double) -> String {
    return "\(Int(minutes/60)):\(Int(minutes) % 60)"
}

0
int mHours = t / 60; //since both are ints, you get an int
int mMinutes = t % 60;
System.out.printf("%d:%02d", "" +mHours, "" +mMinutes);

0
import java.util.Scanner;
public class Time{
    public static void main(String[]args){
        int totMins=0;
        int hours=0;
        int mins=0;
    Scanner sc= new Scanner(System.in);
    System.out.println("Enter the time in mins: ");
        totMins= sc.nextInt();
        hours=(int)(totMins/60);
        mins =(int)(totMins%60);
        System.out.printf("%d:%d",hours,mins);
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.