我需要帮助,如何计算两个日期之间的营业时间?例如我们有两个日期;01/01/2017 10:00 和 04/01/2017 15:00。我们工作日的工作时间是 09:30 到 17:30(8 小时)。如何使用 Java 计算工作时间和分钟数?
谢谢你的帮助。
这是我将String解析成的方法LocalDateTime.
public static String formatDate(final String date) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SS");
LocalDateTime formatDateTime = LocalDateTime.parse(date, formatter);
return formatDateTime.atZone(ZoneId.of("UTC")).toOffsetDateTime().toString();
}
Run Code Online (Sandbox Code Playgroud)
但这仅适用于输入字符串,
2017-11-21 18:11:14.05
但无法2017-11-21 18:11:14.057
使用DateTimeParseException.
如何定义适用于.SS和.SSS?的格式化程序?
java datetime-format datetime-parsing java-time dateformatter
有人遇到过类似的事情吗?切换到JAVA 9之后,我遇到了这样的问题
Caused by: java.lang.NoClassDefFoundError: java/sql/Time
at com.google.gson.Gson.<init>(Gson.java:240)
at com.google.gson.GsonBuilder.create(GsonBuilder.java:569)
at net.thucydides.core.reports.json.gson.GsonJSONConverter.<init>(GsonJSONConverter.java:50)
at net.thucydides.core.reports.json.gson.GsonJSONConverter$$FastClassByGuice$$6794eb79.newInstance(<generated>)
at com.google.inject.internal.DefaultConstructionProxyFactory$FastClassProxy.newInstance(DefaultConstructionProxyFactory.java:89)
at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:111)
at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:90)
at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:268)
at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:56)
at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:194)
at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1019)
at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1085)
at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1015)
... 25 more
Caused by: java.lang.ClassNotFoundException: java.sql.Time
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:563)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
... 42 more
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的Java版本,也没有更新gson库,我的意思是相同的程序包正在Java 8上运行。有什么建议吗?
我对pytorch语言建模中的以下代码有疑问:
print("Training and generating...")
for epoch in range(1, config.num_epochs + 1):
total_loss = 0.0
model.train()
hidden = model.init_hidden(config.batch_size)
for ibatch, i in enumerate(range(0, train_len - 1, seq_len)):
data, targets = get_batch(train_data, i, seq_len)
hidden = repackage_hidden(hidden)
model.zero_grad()
output, hidden = model(data, hidden)
loss = criterion(output.view(-1, config.vocab_size), targets)
loss.backward()
Run Code Online (Sandbox Code Playgroud)
请检查第 5 行。
init_hidden 函数如下:
def init_hidden(self, bsz):
weight = next(self.parameters()).data
if self.rnn_type == 'LSTM': # lstm?(h0, c0)
return (Variable(weight.new(self.n_layers, bsz, self.hi_dim).zero_()),
Variable(weight.new(self.n_layers, bsz, self.hi_dim).zero_()))
else: # gru & rnn?h0
return Variable(weight.new(self.n_layers, …Run Code Online (Sandbox Code Playgroud) log4j.appender.LOGFILE.Append = true
医生说:
如果append参数为true,则将附加该文件.否则,文件名指定的文件将在打开之前被截断.
这是否意味着如果Append = true,新日志将被附加到文件的尾部?然后"截断"表示什么?在打开文件之前将删除内容?
谢谢.
我试图将a格式化Date为String使用SimpleDateFormat,而im使用的模式就是这个
"YYYY-MM-dd'T'HH:MM:ss.SSSxxx"
但到达这条线时
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSxxx");
Run Code Online (Sandbox Code Playgroud)
我得到以下异常:
java.lang.IllegalArgumentException:在java.text.SimpleDateFormat的java.text.SimpleDateFormat.validatePattern(SimpleDateFormat.java:312)的java.text.SimpleDateFormat.validatePatternCharacter(SimpleDateFormat.java:323)中的未知模式字符'x'. SimpleDateFormat.java:365)at java.text.SimpleDateFormat.(SimpleDateFormat.java:258)
我试图实现的格式是" 2017-06-16T12:19:59.001 + 02:00 "
根据文档这个模式应该工作什么错了?
编辑 为了澄清,我尝试了xxx和XXX
在XXX的情况下我得到java.lang.IllegalArgumentException:未知的模式字符'X'
在Joda中,我们可以计算2个Datetime之间的年份
Years.between(dateTime1, dateTime2);
Run Code Online (Sandbox Code Playgroud)
是否有任何简单的方法可以在2个时刻之间找到使用java.timeAPI而没有太多逻辑的年份?
ChronoUnit.YEARS.between(instant1, instant2)
Run Code Online (Sandbox Code Playgroud)
失败:
Exception in thread "main" java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Years
at java.time.Instant.until(Instant.java:1157)
at java.time.temporal.ChronoUnit.between(ChronoUnit.java:272)
...
Run Code Online (Sandbox Code Playgroud) 我正在 Keras/Tensorflow 中训练 U-Net CNN,发现第一个时期的最后一批和第二个时期的第一批之间的损失大幅减少:
Epoch 00001: loss improved from inf to 0.07185 - categorical_accuracy: 0.8636
Epoch 2/400: 1/250 [.....................] - loss: 0.0040 - categorical_accuracy: 0.8878
Run Code Online (Sandbox Code Playgroud)
奇怪的是,分类准确率并没有随着损失而下降,而是略有增加。损失下降后,不会进一步减少,而是稳定在较低值附近。我知道关于该问题的信息很少,但这种行为可能表明存在一个常见问题,我可以进一步调查吗?
一些额外信息:Optimizer = Adam(lr=1e-4)(降低 lr 似乎没有帮助)
损失:‘类别加权分类交叉熵’,计算如下
def class_weighted_categorical_crossentropy(class_weights):
def loss_function(y_true, y_pred):
# scale preds so that the class probas of each sample sum to 1
y_pred /= tf.reduce_sum(y_pred, -1, True)
# manual computation of crossentropy
epsilon = tf.convert_to_tensor(K.epsilon(), y_pred.dtype.base_dtype)
y_pred = tf.clip_by_value(y_pred, epsilon, 1. - epsilon)
# Multiply each class by its weight: …Run Code Online (Sandbox Code Playgroud) 我试过使用 -
int startSeconds = restaurant.openingTime.toSecondOfDay();
int endSeconds = restaurant.closingTime.toSecondOfDay();
LocalTime timeBetweenOpenClose = LocalTime.ofSecondOfDay(ThreadLocalRandom.current().nextInt(startSeconds, endSeconds));
Run Code Online (Sandbox Code Playgroud)
但这通常会遇到错误,如 nextInt(origin, bounds), origin 不能小于 bounds,如果 myopeningTime是 16:00:00 和closingTime02:00:00 ,则会发生这种情况。
我从服务中收到即时消息,以下是案例。
在第一种情况下,说instant = "2021-03-23T04:17:35Z"& 在第二种情况下,
instant = "2021-07-15T05:27:00Z"
然后需要将 instant 转换为 offsetDateTime,就像
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.UTC)
Run Code Online (Sandbox Code Playgroud)
现在我想计算上面的 offsetDateTime 和 instant.now 之间的小时差距
ChronoUnit.HOURS.between(Instant.parse(offsetDateTime), Instant.now())
Run Code Online (Sandbox Code Playgroud)
结果
情况1:工作正常
情况 2:错误:
DateTimeParseException: Text '2021-07-15T05:27Z' could not be parsed at index 16
想通了原因:
在情况2中,如果它也能通过的话也是一样的2021-07-15T05:27:00Z。它会起作用,但在instant.atOffset(ZoneOffset.UTC)内部会调用下面的方法,其中零将被删除,基本上分钟部分将被整理出来。所以下面的 fn 将返回2021-07-15T05:27Z,这将导致 DateTimeParseException。
public static OffsetDateTime ofInstant(Instant instant, ZoneId zone) {
Objects.requireNonNull(instant, "instant");
Objects.requireNonNull(zone, "zone");
ZoneRules rules = zone.getRules();
ZoneOffset offset = rules.getOffset(instant);
LocalDateTime ldt = LocalDateTime.ofEpochSecond(instant.getEpochSecond(), instant.getNano(), offset);
return new …Run Code Online (Sandbox Code Playgroud)