我有一个JodaTime Period,我是从两个DateTime时刻创建的.有没有一种方法可以将该期间转换为十进制小时数?
例如,我有一个时间段,从2010年1月1日下午1点到1点30分.我怎样才能将该时间段视为1.5小时.
在过去,我使用秒和BigDecimals手动转换,例如:
int seconds = myPeriod.toStandardSeconds().getSeconds();
BigDecimal d = new BigDecimal((double) seconds / 3600);
// Round to two decimals
BigDecimal correctResult = d.setScale(2, RoundingMode.HALF_DOWN);
Run Code Online (Sandbox Code Playgroud)
这种感觉就像一个黑客,当我开始将Periods加在一起时更别提尴尬了.似乎应该有更好的方法.
有任何想法吗?谢谢
根据ISO-8601标准,有4种表达间隔/持续时间的方式:
开始和结束,例如"2007-03-01T13:00:00Z/2008-05-11T15:30:00Z"
开始和持续时间,例如"2007-03-01T13:00:00Z/P1Y2M10DT2H30M"
持续时间和结束,例如"P1Y2M10DT2H30M/2008-05-11T15:30:00Z"
持续时间,例如"P1Y2M10DT2H30M",带有附加的上下文信息
仅使用Java 8(没有Joda,扩展等),是否有处理案例1-3的优雅方法?
我知道Duration.Parse()并且Period.Parse(),但我想知道是否有一种处理这4种情况的优雅方式.例如:
String datePeriod = "2016-07-21/P6D";
String twoDates = "2016-07-21/2016-07-25";
Duration d = Duration.parse(datePeriod); // DateTimeParseException
Duration p = Duration.parse(twoDates); // same
Run Code Online (Sandbox Code Playgroud)
我目前的思维过程非常草率,我百分百肯定有更好的方法.对于每种情况,使用嵌套的try/catch块分别处理4个案例,这看起来有点像反模式,如果有的话.(拆分/,解析第一个块的日期,检查错误,解析第一个块的时间段,解析第二个块的日期,检查错误......你明白了)
任何提示将非常感谢!
-
此外,ISO 8601时间间隔解析在Java中的答案并没有真正帮助我,因为最顶层的答案只关心这些PT...东西.
我从数组中获取数据.由于某种原因,该数组具有键值[3.3],我无法从中检索数据.
我有这个数组[3.3] => First Name [3.6] => Last Name[2] => email@example.com.
当我尝试调用$array[3.3]它时返回null,但是当我打电话给$array[2]我时,我收到了电子邮件.有任何想法吗?
我对PHP很新,但我似乎无法在谷歌找到这个问题的解决方案.
这是一些示例代码:
$headers = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
Run Code Online (Sandbox Code Playgroud)
句点字符在每个字符串的中间做了什么?
即:"blabla"."blabla"."blablalba";
有谁知道为什么
print "$str is " , ispalindrome($str) ? "" : " not" , " a palindrome\n"
Run Code Online (Sandbox Code Playgroud)
打印"女士是回文"
但
print "$str is " . ispalindrome($str) ? "" : " not" . " a palindrome\n"
Run Code Online (Sandbox Code Playgroud)
打印"1"?
我只需要知道如何在浮点数中检测重复的十进制扩展.
例:
0.123456789123456789
该数字的重复部分为123456789.
我想用C#自动化这个,有没有智能解决方案?
在Java类中,java.time.Period该方法normalized()的Javadoc中包含以下内容:
这将使年和月单位标准化,而使天单位保持不变。
超类的方法在其Javadoc中具有以下内容:
规范化过程特定于每个日历系统。例如,在ISO日历系统中,年和月被标准化,而天未被标准化,[...]
我无权访问ISO 8601-1:2019的实际文本,也不想在上面花费数百个[在此处插入货币](我想标准化可能在第1部分中描述:基本规则而不是在第2部分:扩展中)。
有人可以阐明为什么Period#normalized()不使天数正常化吗?它是否真的直接来自ISO 8601本身,是在其他地方指定的,还是仅特定于Java实现的?
我有两个LocalDate声明如下:
val startDate = LocalDate.of(2019, 10, 31) // 2019-10-31
val endDate = LocalDate.of(2019, 9, 30) // 2019-09-30
Run Code Online (Sandbox Code Playgroud)
然后我使用Period.between函数计算它们之间的周期:
val period = Period.between(startDate, endDate) // P-1M-1D
Run Code Online (Sandbox Code Playgroud)
此处的期间为负数的月份和天数,如果endDate早于,则可以预期startDate。
但是,当我将其添加period回时startDate,得到的结果不是endDate,而是前一天的日期:
val endDate1 = startDate.plus(period) // 2019-09-29
Run Code Online (Sandbox Code Playgroud)
所以问题是,为什么不不变
startDate.plus(Period.between(startDate, endDate)) == endDate
保留这两个日期?
是Period.between谁返回了不正确的期限,还是LocalDate.plus谁添加了不正确的期限?
如何比较 java 8 中的两个句点?
例如
Period one = Period.of(10,0,0);
Period two = Period.of(8,0,0);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,一大于二。
这看起来应该很容易,但我在谷歌搜索时找不到答案。假设我有一些类型为 pandas.Period 的变量 k,其值为:
Period('2018-11', 'M')
Run Code Online (Sandbox Code Playgroud)
如何向该变量添加 n 个月。例如,如果 n 是 3 我希望 k 是
Period('2019-02', 'M')
Run Code Online (Sandbox Code Playgroud)
我已经尝试过以下方法:
k.month = k.month + 12
Run Code Online (Sandbox Code Playgroud)
但这失败了:
AttributeError: attribute 'month' of 'pandas._libs.tslibs.period._Period' objects is not writable
Run Code Online (Sandbox Code Playgroud)