我想将时间戳(以GMT为单位)
转换为本地日期和时间
。
这是我到目前为止已经实现的,但是它给了我错误的月份
Timestamp stp = new Timestamp(1640812878000L);
Calendar convertTimestamp = convertTimeStamp(stp,"America/Phoenix");
System.out.println(convertTimestamp.getTime());
public static Calendar convertTimeStamp( Timestamp p_gmtTime, String p_timeZone) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy HH:MM:SS a", Locale.ENGLISH);
DateFormat formatter = DateFormat.getDateTimeInstance();
if (p_timeZone != null) {
formatter.setTimeZone(TimeZone.getTimeZone(p_timeZone));
} else {
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
}
String gmt_time = formatter.format(p_gmtTime);
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(gmt_time));
return cal;
}
任何帮助将不胜感激。
Instant
.ofEpochMilli( // Parse a count of milliseconds since 1970-01-01T00:00Z.
1_640_812_878_000L
) // Returns a `Instant` object.
.atZone( // Adjust from UTC to a time zone. Same moment, same point on the timeline, different wall-clock time.
ZoneId.of( "America/Phoenix" )
) // Returns a `ZonedDateTime` object.
.format( // Generat text representing the date-time value kept within that `ZonedDateTime` object.
DateTimeFormatter
.ofLocalizedDateTime( FormatStyle.MEDIUM )
.withLocale( Locale.US )
) // Returns a `String` object.
请参阅此代码在 IdeOne.com 实时运行。
2021 12月29日下午2:21:18
您使用的是几年前被现代java取代的糟糕的旧日期时间类。JSR 310中定义的时间类。切勿使用时间戳
、日历
、日期、
简单格式
等。
使用< code>Instant
类表示在UTC中看到的时刻,偏移量为零小时-分钟-秒。
long millisecondsSinceBeginningOf1970InUtc = 1_640_812_878_000L ;
Instant instant = Instant.ofEpochMilli( millisecondsSinceBeginningOf1970InUtc ) ;
指定您感兴趣的时区。
ZoneID z = ZoneId.of( "Africa/Tunis" ) ;
从零偏移量调整到该时区以生成ZonedDateTime
对象。
ZonedDateTime zdt = instant.atZone( z ) ;
通过自动本地化生成表示该时刻的文本。使用区域设置
指定要在翻译中使用的人类语言,以及在确定缩写、大小写、元素顺序等时使用的区域性。
Locale locale = Locale.JAPAN ; // Or Locale.US, Locale.ITALY, etc.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.LONG ).withLocale( locale ) ;
String output = zdt.format( f ) ;
所有这些都在Stack Overflow上多次得到解决。搜索以了解更多信息。
你不能把一个时间戳转换成另一个时区,因为时间戳总是GMT,它们是宇宙中时间线上的一个给定时刻。
我们人类习惯于我们星球上的本地时间,所以时间戳可以被格式化为更易于人类阅读,并且在这种情况下,它被转换为本地时区。
使用遗留java.util.*包,执行如下操作:
DateFormat tzFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
tzFormat.setTimeZone(TimeZone.getTimeZone("CET")); // Use whatever timezone
System.out.println(tzFormat.format(date));
如果您需要在本地时区的时间戳上进行“数学”(例如,明天8:00本地时区),那么情况就更复杂了。
为此,您可以诉诸许多黑客攻击(例如解析或修改使用上述方法获得的字符串),或使用新的Java日期
Instant timestamp = Instant.ofEpochMilli(inputValue);
ZonedDateTime romeTime = timestamp.atZone(ZoneId.of("Europe/Rome"));
注意第二个例子是如何使用“欧洲/罗马”而不是一般的“CET”的。如果您计划处理使用DST的时区,这一点非常重要,因为DST变更日(或者他们是否使用DST)可能会因国家而异,即使他们在同一个时区。
我试图找出如何在Kotlin中将转换为,这在Java中非常简单,但我在Kotlin中找不到任何等效的。 例如:历元时间戳(1970-01-01以来的秒数)== 在Kotlin中是否有解决方案,或者我是否必须在Kotln中使用Java语法?请给我一个简单的例子来说明如何解决这个问题。提前谢谢。 这个链接不是我问题的答案
我在一个应用程序中使用log4j2进行日志记录,并且该应用程序部署在运行于伦敦、东京、纽约等地的服务器上。 我稍后汇总日志以进行分析。为了使其统一,我想将日志的时间戳转换为单个时区,例如GMT或EST。如何在log4j2中做到这一点?
问题内容: 我尝试将其转换为java.sql.Timestamp后插入,并使用以下代码段: 但是,这是给我的 有没有办法在没有毫秒的情况下获得输出? 问题答案: 您可以使用来减少毫秒数: 输出:
问题内容: 我有以下整数形式的时间戳 我可以使用SQL进行转换: 如何在Java中转换它?这样它将返回值: 问题答案: 假设自1970年1月1日以来的时间(以秒为单位)。你可以试试
问题内容: 我必须将linux时间戳转换为android日期。我从服务器获得此号码 我写了一个小代码段。 但这不能正确转换,这是我的结果 编辑 :通常我必须在这里 还有另一种获取正确日期的方法吗??? 问题答案: UNIX时间戳记应以毫秒为单位,因此将Long值乘以1000。因此,您的值1386889262将为1386889262000:
问题内容: 我在mysql数据库中有一个timestamp变量列。尝试将Carbon时间戳转换为我可以在此处输入的内容,但仅返回Carbon对象,当我尝试使用Carbon对象的时间戳字符串时,它未在mysql中注册。 我的第一个var dump就像这样: 我的第二个var dump就是这样。 与“ published_at”有关的mysql列是一个时间戳变量。我想如何将其从Carbon对象转换为?