如何在Java中将UTC时间戳转换为本地日,小时,分钟?

时间:2010-10-01 21:12:05

标签: java datetime

然后给出时间戳1245613885,它是GMT中的时间戳

如何使用服务器的本地时区信息将其转换为Java中的年,日,小时,分钟值?

6 个答案:

答案 0 :(得分:7)

您可以使用java.util.Calendar。它提供了setTimeZone()方法(这是多余的方法,因为它默认情况下已经选择了系统默认时区)。

long timestamp = 1245613885;
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(TimeZone.getDefault());
calendar.setTimeInMillis(timestamp * 1000);

int year = calendar.get(Calendar.YEAR);
int day = calendar.get(Calendar.DATE);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);

如果您想将其显示在人类可读的日期字符串中,那么我建议您SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = sdf.format(calendar.getTime());
System.out.println(dateString); // 2009-06-21 15:51:25

(根据我的时区GMT-4输出正确)

答案 1 :(得分:2)

import java.util.Calendar;  
import java.util.TimeZone;

public class Example{
   public static void main(String[] args){
      long utcTimestamp = 1285578547L;
      Calendar cal = Calendar.getInstance(TimeZone.getDefault());
      cal.setTimeInMillis(utcTimestamp * 1000);
      System.out.println(cal.get(Calendar.YEAR));
      System.out.println(cal.get(Calendar.MONTH));
      System.out.println(cal.get(Calendar.DAY_OF_MONTH));
      System.out.println(cal.get(Calendar.DAY_OF_YEAR));
      System.out.println(cal.get(Calendar.HOUR));
      System.out.println(cal.get(Calendar.MINUTE));
   }
}

答案 2 :(得分:1)

我会使用像Joda Time这样的东西比JDK Date / Calendar类快得多,而且日期解析也没有线程安全问题(不是你的问题与日期解析有关)

答案 3 :(得分:0)

基本上你只需要一个格式化程序来执行此操作

日期日期=新日期(1245613885L * 1000);
SimpleDateFormat formatter = new SimpleDateFormat('MM / dd / yyyy');
的System.out.println(formatter.format(日期));

答案 4 :(得分:0)

tl; dr

Instant                                        // Represent a moment in UTC.
.ofEpochMilli( 1_245_613_885L )                // Parse a count of milliseconds since the epoch reference of first moment of 1970 in UTC, 1970-01-01T00:00:00Z.
.atZone(                                       // Adjust from UTC to the wall-clock time used by the people of a particular region (a time zone).
    ZoneId.of( "Asia/Tokyo" )                  // Or "America/Chicago" etc.
)                                              // Returns a `ZonedDateTime` object.
.format(                                       // Generate text representing the value of our `ZonedDateTime` object.
    DateTimeFormatter
    .ofLocalizedDateTime( FormatStyle.FULL )   // Automatically localize the format and content of the string being generated.
    .withLocale( Locale.CANADA_FRENCH )        // Or Locale.US etc.
)                                              // Returns a `String` object.
  

jeudi 15 janvier 1970à19 h 00 min 13 s heure normale du Japon

java.time

现代方法使用 java.time 类,该类取代了采用JSR 310以来的可怕的日期时间类。

如果您输入的1245613885是自1970年1月1日以来以毫秒为单位的毫秒数,则将其解析为Instant(以UTC为单位)。

Instant instant = Instant.ofEpochMilli( 1_245_613_885L ) ;

使用标准ISO 8601格式生成表示该Instant对象的值的字符串。

String output = instant.toString() ;

从UTC调整为特定地区(时区)人们使用的挂钟时间。

Continent/Region的格式指定proper time zone name,例如America/MontrealAfrica/CasablancaPacific/Auckland。切勿使用2-4个字母的缩写,例如ESTIST,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "America/Montreal" ) ;  

如果要使用JVM的当前默认时区,请提出要求并作为参数传递。如果省略,代码将变得难以理解,因为我们不确定您是否打算使用默认值,还是像许多程序员一样不知道该问题。

ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.

ZoneId应用于Instant以获得ZonedDateTime

ZonedDateTime zdt = instant.atZone( z ) ;  // Same moment as the `instant`, but different wall-clock time.

使用标准ISO 8601格式生成一个表示该ZonedDateTime对象的值的字符串,该格式已扩展为在方括号中附加区域名称。

String output = zdt.toString() ;

对于其他格式,请指定您自己的自定义格式设置模式,或者让 java.time 自动进行本地化。对于任一路由,请使用DateTimeFormatter。搜索堆栈溢出,因为已经处理了很多次。

答案 5 :(得分:-1)

Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("America/Los_Angeles"), Locale.US);
calendar.setTimeInMillis(1245613885 * 1000);
int year = calendar.get(Calendar.YEAR);
int day = calendar.get(Calendar.DAY_OF_YEAR);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);

如果您需要不同的时区,请将您传递的TimeZone值更改为Calendar对象的构造函数。