使用Java 8,下面的代码将"18"解析为年"0018"而不是"2018".
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("M/d/y");
return LocalDate.parse(date, formatter);
Run Code Online (Sandbox Code Playgroud)
输入日期为"01/05/18".
1)为什么结果是"0018"?难道DateTimeFormatter没有按照80-20规则?
2)如何控制SimpleDateFormat解析为19xx或20xx?谈到SimpleDateFormat.set2DigitYearStart(Date)可以用来修复这一年.有没有类似的东西DateTimeFormatter?
我希望"M/d/y"能解析2到4位数年份.
"M/d/yy"抛出4位数的异常并将"01/05/97"解析为"2097-01-05".理想情况下,这应解析为"1997-01-05".
"M/d/yyyy"抛出2位数年份的例外情况.
我正在查看Java 8的新日期时间包的教程.在关于DayOfWeek和Month枚举的页面上,它表示DayOfMonth枚举从星期一到星期日.这是为什么?我使用的每个其他系统(包括.NET)都在周日开始.
我想知道是否可以在 Java 8 中将 LocalDate 转换为 OffsetDateTime。
例如假设我有这个 LocalDate:
1992-12-28
Run Code Online (Sandbox Code Playgroud)
然后我想把它转换成这样OffsetDateTime:
1992-12-28T00:00-03:00
Run Code Online (Sandbox Code Playgroud)
假设我们知道时区,例如 America/Santiago。
Java 17 中添加了一个新接口。java.time.InstantSource如果该接口的所有实现都是实现,那么该附加抽象的用例是什么Clock?
我有两个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谁添加了不正确的期限?
我正在尝试创建一个允许用户更新、编辑、删除等的网站,并且我已经到达更新或编辑用户\xe2\x80\x99s信息的部分。我使用不同的方法多次尝试,但似乎无法克服该错误。我完全忘记了Optional<>我只是不明白\xe2\x80\x99t得到它。我已阅读https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html,但我不明白它应该如何编码,它只是不点击。如果有人可以告知如何在我的代码中对其进行编码并请解释它,我将非常感激。也许是因为我工作过度并且没有睡觉,但我似乎无法纠正这个错误。这是我尝试编辑用户信息时在页面上收到的错误:
\n\n出现意外错误(类型=内部服务器错误,状态=500)。\n对于输入字符串:“id”\njava.lang.NumberFormatException:对于输入字符串:id
\n\n //Repository\n\n public interface UserRepository extends CrudRepository<User, Integer> {\n }\nRun Code Online (Sandbox Code Playgroud)\n\n这是用户服务
\n\n //UserService\n\n @Service\n @Transactional\n public class UserService {\n\n private final UserRepository userRepository;\n\n public UserService(UserRepository userRepository) {\n this.userRepository=userRepository;\n\n }\n public void saveMyUser(User user) {\n userRepository.save(user);\n }\n\n public List<User> showAllUsers(){\n\n List<User> users = new ArrayList<User>();\n for(User user: userRepository.findAll()) {\n users.add(user);\n }\n\n return users;\n }\n\n public void deleteMyUser(int id) {\n userRepository.deleteById(id);\n\n }\n\n public User editUser (int id) {\n\n return userRepository.findById(id);//I also get an error here as …Run Code Online (Sandbox Code Playgroud) 如何将 TemporalAccessor 转换为 java.util.Date?
TemporalAccessor accessor = functionReturnsTemporalAccessor()
Date date = Date.from(accessor)
Run Code Online (Sandbox Code Playgroud)
Date.from()不接受TemporalAccessor,有什么方法可以转换为java.util.Date吗?
我正在尝试将日语日期字符串转换为 JapaneseDate。
\nDateTimeFormatter formatter = DateTimeFormatter.ofPattern("Gyy\xe5\xb9\xb4MM\xe6\x9c\x88dd\xe6\x97\xa5")\n .withChronology(JapaneseChronology.INSTANCE)\n .withResolverStyle(ResolverStyle.LENIENT);\nJapaneseDate d = JapaneseDate.from(formatter.parse("\xe5\xb9\xb3\xe6\x88\x9001\xe5\xb9\xb401\xe6\x9c\x8801\xe6\x97\xa5"));\nSystem.out.println(d);\nSystem.out.println(d.format(formatter));\nRun Code Online (Sandbox Code Playgroud)\n输出:
\nJapanese Reiwa 71-01-01\n\xe4\xbb\xa4\xe5\x92\x8c71\xe5\xb9\xb401\xe6\x9c\x8801\xe6\x97\xa5\nRun Code Online (Sandbox Code Playgroud)\n由于“\xe4\xbb\xa4\xe5\x92\x8c\xe5\x85\x83\xe5\xb9\xb4”是“2019”,“\xe4\xbb\xa4\xe5\x92\x8c71\xe5\xb9\ xb401\xe6\x9c\x8801\xe6\x97\xa5" 为 "2089-01-01"。\n"\xe5\xb9\xb3\xe6\x88\x9001\xe5\xb9\xb401\xe6\x9c\x8801 \xe6\x97\xa5" 必须是 "1989-01-01"。
\n我怎样才能正确地转换它?
\n如果我将解析器样式更改为ResolverStyle.STRICT,它会抛出
java.time.format.DateTimeParseException: Text \'\xe5\xb9\xb3\xe6\x88\x9001\xe5\xb9\xb401\xe6\x9c\x8801\xe6\x97\xa5\'\ncould not be parsed: year, month, and day not valid for Era\nRun Code Online (Sandbox Code Playgroud)\n如果我将解析器样式更改为ResolverStyle.SMART,它会抛出
java.time.format.DateTimeParseException: Text \'\xe5\xb9\xb3\xe6\x88\x9001\xe5\xb9\xb401\xe6\x9c\x8801\xe6\x97\xa5\'\ncould not be parsed: Invalid YearOfEra for Era: Heisei 101\nRun Code Online (Sandbox Code Playgroud)\n 这是我将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
我对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) java ×7
java-time ×6
date ×3
java-8 ×3
datetime ×2
date-format ×1
date-parsing ×1
dayofweek ×1
kotlin ×1
localdate ×1
nlp ×1
option-type ×1
period ×1
pytorch ×1
temporal ×1