如何获得自Java当年1月1日开始以来的小时数? I. e。 1月1日的第一个小时= 0001 我可以使用JodaTime或任何其他lib来完成此操作吗? 谢谢,
答案 0 :(得分:4)
使用Java 8及更高版本(java.time package)中内置的Tutorial:
ChronoUnit.HOURS.between(
LocalDateTime.of(LocalDateTime.now().getYear(), 1, 1, 0, 0),
LocalDateTime.now())
我认为这是自我解释的
答案 1 :(得分:4)
使用Java 8 API进行日期/时间
+(NSAttributedString *) returnRichTextForString:(NSString *) inputString {
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithData:[inputString dataUsingEncoding:NSUTF8StringEncoding] options:@{
NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)
}
documentAttributes:nil
error:nil];
[attributedString beginEditing];
//Hack for italic/skew effect to custom fonts
[attributedString enumerateAttribute:NSParagraphStyleAttributeName inRange:NSMakeRange(0, attributedString.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) {
if (value) {
NSMutableParagraphStyle *myStyle = (NSMutableParagraphStyle *)value;
if (myStyle.minimumLineHeight == 99) {
[myStyle setMinimumLineHeight:0];
[attributedString addAttribute:NSObliquenessAttributeName
value:[NSNumber numberWithFloat:0.30] range:range];
}
}
}];
//Hack for bold effect.
[attributedString enumerateAttribute:NSStrikethroughStyleAttributeName inRange:NSMakeRange(0, attributedString.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) {
if (value) {
[attributedString addAttribute:NSStrokeWidthAttributeName
value:[NSNumber numberWithFloat:-3.0] range:range];
[attributedString addAttribute:NSStrikethroughStyleAttributeName
value:[NSNumber numberWithFloat:0.0] range:range];
}
}];
[attributedString endEditing];
return attributedString;
}
答案 2 :(得分:1)
我强烈怀疑许多用户宁愿将dst-effects考虑在内:
ZoneId zi = ZoneId.of("Europe/Paris"); // example
ZonedDateTime now = ZonedDateTime.now(zi);
ZonedDateTime start = ZonedDateTime.of(now.getYear(), 1, 1, 0, 0, 0, 0, zi);
long realDelta = ChronoUnit.HOURS.between(start, now);
System.out.println("hours between: " + realDelta); // 5386
// another way using Instant
Instant i2 = now.toInstant();
Instant i1 = start.toInstant();
System.out.println(i1); // 2014-12-31T23:00:00Z
System.out.println(i2); // 2015-08-13T09:55:53.353Z
System.out.println("duration=" + i1.until(i2, ChronoUnit.HOURS)); // 5386
到目前为止,基于LocalDateTime
而没有任何时区的建议解决方案将产生不同的结果(此处仅为名义而非物理持续时间):
LocalDateTime ldt2 = LocalDateTime.now();
LocalDateTime ldt1 = LocalDateTime.of(ldt2.getYear(), 1, 1, 0, 0);
long hoursBetween = ChronoUnit.HOURS.between(ldt1, ldt2);
System.out.println("hours between: " + hoursBetween); // 5385
如果java.util.GregorianCalendar
,结果将与基于ZonedDateTime
的Java-8相同。其他图书馆也提供类似的结果,但我忽略了这些细节,因为了解时区对结果的影响更为重要。