在Java中添加手动小时方法计算本地时间



你好,我有一个方法可以在当前时间中添加一个时间。我要找的是,我想添加此代码一个本地时间信息,因为无法正确获取我所在国家的本地时间。我在stackoverflow中搜索了一下,但找不到类似的主题。我愿意接受你的建议,谢谢。

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
public class MyClass {
public static void main(String args[]) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR_OF_DAY, 8);
DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
System.out.println(dateFormat.format(cal.getTime()));
}
}

我用java.time实用程序更改了代码

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
public class MyClass {
public static void main(String args[]) {
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
LocalDateTime date = LocalDateTime.now();
System.out.println(dateFormat.format(date));
System.out.println(dateFormat.format(date.plusHours(10)));  
}
}

tl;dr

ZonedDateTime
.now( ZoneId.of( "Europe/Istanbul" ) )
.plusHours( 10 )

否,不是Calendar

千万不要使用可怕的CCD_ 2&SimpleDateFormat遗留类。

不,不是LocalDateTime

切勿拨打LocalDateTime.now。我无法想象这样做是正确的。

LocalDateTime类缺少时区或UTC偏移量的上下文。所以这个类不能代表一个时刻,一个时间线上的特定点。

要跟踪某个时刻,请使用:InstantOffsetDateTimeZonedDateTime类。

ZoneId

指定您的时区。

ZoneId z = ZoneId.of( "Europe/Istanbul" ) ;

或者获取JVM的当前默认时区。

ZoneId z = ZoneId.systemDefault() ;

ZonedDateTime

获取当前时刻。

ZonedDateTime now = ZonedDateTime.now( z ) ;

添加时间。

ZonedDateTime later = now.plusHours( 10 ) ;

不幸的是,您无法真正使用时区,因为您是从操作系统中获取时区的。如果操作系统为您提供UTC,请将其配置为土耳其或在应用程序中进行更改。

既然你知道自己的位置,就这样做:

LocalDateTime date = LocalDateTime.now((ZoneId.of("Europe/Istanbul"));

下面的这个问题可能会有所帮助:如何获取基于土耳其时区的Calendar.getInstance((

您还可以使用互联网提供商推断您的时区。下面有两个例子。

时区示例1

RestTemplate restTemplate = new RestTemplate();
String timezone = restTemplate.getForObject("https://ipapi.co/timezone", String.class);

时区示例2

String timezone = restTemplate.getForObject("http://ip-api.com/line?fields=timezone", String.class);

获取时区后:

LocalDateTime date = LocalDateTime.now(ZoneId.of(timezone));

相关内容

  • 没有找到相关文章

最新更新