Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java如何将日期转换为小时和分钟_Java_Jodatime_Formatter - Fatal编程技术网

java如何将日期转换为小时和分钟

java如何将日期转换为小时和分钟,java,jodatime,formatter,Java,Jodatime,Formatter,如何将日期转换为小时和分钟? 这样一种方式: Date d=new Date(); String str=convertToMyFormat(d); print(str); // for example for date Sat Jan 03 04:40:00 GMT+03:30 1970 print should be some //thing like this: >> str ="50:10"; 如果使用此代码创建日期: Period p = new Period(0l)

如何将日期转换为小时和分钟? 这样一种方式:

Date d=new Date();
String str=convertToMyFormat(d);
print(str);
// for example for date Sat Jan 03 04:40:00 GMT+03:30 1970 print should be some 
//thing  like this:
>> str ="50:10";
如果使用此代码创建日期:

Period p = new Period(0l);
p = p.plusDays(2);
p = p.plusMinutes(70);
d=new Date(p.toStandardDuration().getMillis());
这个解决方案

public String convertToMyFormat(Date d){
 Duration du=new Duration(d.getTime())
 str=du.toStandardHours().getHours() + ":"+ du.getMinutes();
 return str;
}
打印时间大于60分钟。49:70

我需要一种方法,如果分钟数大于60小时增量。
每个将java.util.date或long转换为此格式的解决方案都是可以接受的。如果持续时间大于24小时,则应增加小时数,而不是增加天数

假设您需要当前月份的小时数和分钟数,使用Jodatime:

public static String convert (DateTime input) {
    int hours = (input.getDayOfMonth() - 1) * 24 + input.getHourOfDay();
    return String.format("%d:%02d",hours,input.getMinuteOfHour());
}

public static void main(String[] args) {
    System.out.println(convert(new DateTime("2014-01-01T22:09")) );
    System.out.println(convert(new DateTime("2014-01-03T22:21")) );
    System.out.println(convert(new DateTime("2014-01-31T22:44")) );
}
输出

22:09
70:21
742:44
编辑:本年内抵销原则相同:

public static String convertOffsetInYear (DateTime input) {
    int hours = (input.getDayOfYear() - 1) * 24 + input.getHourOfDay();
    return String.format("%d:%02d",hours,input.getMinuteOfHour());
}

如果您需要更奇特的参考时间,即需要计算小时距离的时刻,您可以查看Duration and PeriodFormatterBuilder。

1425小时相对于什么?而且,您是否因为基于Jodatime的解决方案是可接受的,而将问题标记为Jodatime?每个将java.util.date或long转换为此格式的解决方案都是可接受的。例如,1425小时意味着一个月大约720分钟,如果日期大于24小时,则应增加小时而不是增加天。如果日期大于24小时,则没有任何意义。你知道2014年6月25日不是一个持续时间,对吗?我想你的意思是一个月大约是720小时,而不是分钟。但是,1425是从哪里来的呢?主要问题是convert方法的签名中缺少引用时间。关于时间戳与持续时间的关系,这个问题一点也不清楚。我们不应鼓励OP使用具有此类签名的方法。如果该方法至少有两个DateTime类型的参数,那么建议使用更好的方法名称(如between)是可以容忍的。@MenoHochschild我在注释中尝试了两次,试图让OP解释1425的起源,但都没有用。因为我没有得到答案,我希望第一个,公认的幼稚方法——但已经有了指向更复杂、通用和可重用解决方案的指针——能够帮助OP最终正确地解决这个问题。不是这样,你想让我怎么办?这个问题现在被搁置,这是完全合理的,我认为对于那些如此频繁的情况,人们尽管得到了帮助,但他们甚至没有或多或少地清楚地阐述他们所面临的问题。@MenoHochschild我编辑了我的question@fvu那么你已经做了你的努力,-@AhmadReza嗯,内部日期使用一个特殊的持续时间作为状态模型,即固定点1970-01-01T00:00:00Z和要建模的结束时间戳之间的持续时间。但这并没有改变日期对象本身不是持续时间而是时间戳这一事实。对于我和大多数其他人来说,使用UNIX epoch作为时间间隔的开始,然后对问题本身中的这个完全武断的选择保持沉默是不自然的。