在我的 Android 应用程序服务器中,将返回UTC以下格式的日期(yyyy-MM-dd HH:mm:ss24 小时),我需要将这些时间转换为用户的时区,例如CST,IST。
我做了以下代码,但我知道它是否正确,请帮助我以正确的方式进行时区转换。
我将 UTC 日期作为 json 字符串并转换为用户的时区格式并显示 Android 端
private static Date utcDate;
private static DateFormat expireFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
try {
expireFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
utcDate = expireFormat.parse("2014-04-01 10:32:00");
System.out.println(TimeZone.getDefault().getID());
expireFormat.setTimeZone(TimeZone.getTimeZone(TimeZone.getDefault().getID()));
System.out.println(expireFormat.format(utcDate));
} catch (ParseException e) {
e.printStackTrace();
}
output of the code:
Asia/Calcutta
2014-04-01 16:02:00
Run Code Online (Sandbox Code Playgroud) 如何将 Java 8OffsetTime和OffsetDateTimeHibernate 持久化为正确的 SQL 类型(TIME_WITH_TIMEZONE和TIMESTAMP_WITH_TIMEZONE)?我在博客中找到LocalTime并LocalDateTime使用了EnhancedUserTypes的解决方案。
用户类型如何用于偏移数据?
这里的目标是将 LocalDateTime 来回转换为纪元秒。
假设我有一个 LocalDateTime 定义为:
LocalDateTime now = LocalDateTime.now();
Run Code Online (Sandbox Code Playgroud)
我想将其转换为亚洲/加尔各答时区的纪元秒,我可以这样做:
long epochSecondNow = now.atZone(ZoneId.of("Asia/Kolkata")).toEpochSecond();
Run Code Online (Sandbox Code Playgroud)
现在,我想从 epochSecondNow 再次生成“现在”:
LocalDateTime 类有一个方法 '
ofEpochSecond(long epochSecond,long nanoOfSecond, ZoneOffset zoneOffset)',它以纪元秒、nano of second 和 ZoneOffset 作为参数。
我无法使用“Asia/Kolkata”创建 ZoneOffset。我应该如何为我的区域制作 ZoneOffset 对象以使用 'ofEpochSecond' 方法。有没有其他办法?
谢谢!
我需要使用 Java 8 日期和时间 API ( java.time )找到一年最后一周的第一天,最后得出了这个解决方案:
LocalDate date = LocalDate.of(2016, 2, 17);
LocalDate lastWeekOfYear = LocalDate.of(date.getYear() + 1, 1, 7)
.with(WeekFields.ISO.weekOfYear(), 1)
.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).minusDays(7);
Run Code Online (Sandbox Code Playgroud)
此解决方案查找下一年的第一周,必要时将星期几调整为星期一,然后将 7 天后移。有没有更聪明的方法来达到同样的结果?
我有一个包含 java.time.LocalDateTime 类型的属性的类。
public class MyClass{
// ...
private LocalDateTime fecha;
// ...
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 Spring Data 存储库。我想要完成的是根据日期查询实体:
@Service
public interface IRepository extends CrudRepository<MyClass, UUID> {
// ...
public void deleteByFecha(LocalDate fecha);
// ...
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为抛出异常:
org.springframework.dao.InvalidDataAccessApiUsageException: 参数值 [2016-10-05] 与预期类型 [java.time.LocalDateTime (n/a)] 不匹配;
所以问题是如何通过fecha但使用 LocalDate查询数据库中的 MyClass ?
编辑 以防万一有人面临同样的问题,我想出了一个解决方案:修改存储库的方法,使其看起来如下:
import org.springframework.transaction.annotation.Transactional;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
// ...
@Service
public interface IRepository extends CrudRepository<MyClass, UUID> {
@Transactional
@Modifying
@Query("DELETE FROM MyClass mtc WHERE YEAR(mtc.fecha)=?1 AND MONTH(mtc.fecha)=?2 AND DAY(mtc.fecha)=?3")
public …Run Code Online (Sandbox Code Playgroud) 有没有办法以秒为单位获取当天的当前时间?请注意,我问的是一天中的时间,而不是 UTC 时间。
我想要的是介于0 - 86,400 (12:00AM - 11:59PM)之间的值(以秒为单位)。我正在开发一个每天运行的应用程序,当一天结束时,时间(以秒为单位)应该重新开始0。
所以让我们说它是10:00AM。我应该得到36,000秒,如果我的时间是5:00PM,我应该得到61,200秒。
PS:我不知道手头的时间。该程序将使用currentTime()函数自行计算。
我只想要嘲笑now()的LocalDate使用PowerMock.它似乎忽略了thenReturn价值:
java.lang.AssertionError:
Expected :2008
Actual :2017
Run Code Online (Sandbox Code Playgroud)
测试设置:
@PrepareForTest(LocalDate.class)
@RunWith(PowerMockRunner.class)
public class UserTest {
@Test
public void nowShouldReturnSameYear() throws Exception {
LocalDate expected = LocalDate.parse("2008-04-04");
PowerMockito.spy(LocalDate.class);
when(LocalDate.now()).thenReturn(parse);
Foo foo = new Foo();
assertEquals(expected.getYear(), foo.getRightNow().getYear());
}
Run Code Online (Sandbox Code Playgroud)
Foo.java
public LocalDate getRightNow(){
final LocalDate rightNow = LocalDate.now();
return rightNow;
}
Run Code Online (Sandbox Code Playgroud) 我需要在 Java 8 中模拟时间(到特定日期,这意味着我可能不会使用anyLong())以java.time在 EasyMock 下的测试环境中单独使用,因此没有 Joda Time。
EasyMock 不允许你模拟像LocalDateTime.now(). PowerMock 可以,但我不允许使用 PowerMock。
Joda Time 库提供了一种简洁优雅的方式来模拟时间DateTimeUtils.setCurrentMillisFixed(),并DateTimeUtils.setCurrentMillisSystem()回到现在的瞬间。
只有我不允许使用 Joda Time。
我被告知使用模拟时钟java.time.Clock类实例并将其注入LocalDateTime.now()如下:LocalDateTime.now(mockClock)
有没有办法在没有 Joda Time和 PowerMock 的情况下正确实现它?
我最近遇到了LocalTime将 a保存到TIMEMySQL 数据库中的列的问题。保存 的值9:00会导致8:00保存在数据库中。
这个问题在我的开发环境(Windows)上没有发生,但在我们试过的两台 Linux 机器上确实发生了。
我的代码如下:
preparedStatement.setObject(parameterIndex, localTime, JDBCType.TIME);
Run Code Online (Sandbox Code Playgroud)
经过调查,我最终发现 MySQL JDBC 驱动程序正在使用java.sql.Time.valueOf(localTime),然后使用 将SimpleDateFormat其时区设置为 MySql 服务器的system_time_zone系统属性(via time_zone = 'SYSTEM'),将其打印为字符串。
在 Linux 机器上,system_time_zone是GMT,而在 Windows 机器上,它是GMT Standard Time. (我在英国。)
因此, theLocalTime 9:00被转换为 a Timeof 9:00 Europe/London(实际上在内部建模为1st January 1970 9:00 Europe/London),然后使用GMT时区将其写出,该时区与UTC. 现在,通常这两个时区在 1 月份与 UTC 的偏移量为零,但英国在 1969 年和 1970 …
Jackson串行化java.time.Instant与WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS默认启用。
它JSON是这样产生的
{ "timestamp":1421261297.356000000 }
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法摆脱最后的零。我想要这样的东西:
{ "timestamp":1421261297.356 }
Run Code Online (Sandbox Code Playgroud)
我试过:
mapper.configure( SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS, false );
mapper.configure( SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true );
Run Code Online (Sandbox Code Playgroud)
但是此配置将其更改为毫秒表示1421261297356。我想要秒部分和小数毫秒部分。