然后给出时间戳1245613885,它是GMT中的时间戳
如何使用服务器的本地时区信息将其转换为Java中的年,日,小时,分钟值?
答案 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)
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 类,该类取代了采用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/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用2-4个字母的缩写,例如EST
或IST
,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
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
对象的构造函数。