按区域设置将毫秒转换为日期和时间以及格式

时间:2014-02-16 12:10:20

标签: java android date time milliseconds

如何将毫秒转换为时间和日期字符串并按照用户期望的格式正确格式化?

我做了以下事情:

((SimpleDateFormat)DateFormat.getDateInstance(DateFormat.DEFAULT,Locale.getDefault())).format(new Date(Long.parseLong(timeInMilliseconds)));

这似乎有效,但我只能用这种方法得到日期。

编辑:

要清除,我需要以某种方式从系统中获取时间/日期模式,以便为每个用户提供他的通用格式

现在我将你的解决方案与我的解决方案结合起来,它似乎像我期望的那样工作。

private String getFormattedDateTimeString(Context context, String timeInMilliseconds) {
    SimpleDateFormat dateInstance = (SimpleDateFormat) DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.getDefault());
    SimpleDateFormat timeInstance = (SimpleDateFormat) DateFormat.getTimeInstance(DateFormat.DEFAULT, Locale.getDefault());
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(Long.parseLong(timeInMilliseconds));
    String date = dateInstance.format(calendar.getTime());
    String time = timeInstance.format(calendar.getTime());
    return date + " " + time;
}

为什么我要回答这个问题?

5 个答案:

答案 0 :(得分:3)

所有其他答案都缺少日期时间的字符串表示需要本地化的点。

约达时间

Joda-Time 2.3库使这项工作变得更加容易。

Joda-Time利用java.util.Locale来确定日期时间字符串表示的正确格式。 DateTimeFormat类为“样式”模式提供了一种生成DateTimeFormatter的方法。您指定两个字符样式模式。第一个字符是日期样式,第二个字符是时间样式。为短格式指定'S'字符,为中等指定'M',为长指定'L',为完整指定'F'。通过指定样式字符“ - ”可以省略日期或时间。

如果未指定区域设置或时区,则将使用JVM的默认值。

区域设置

要创建java.util.Locale,您需要:

示例代码

// Simulate input.
long millisecondsSinceEpoch = DateTime.now().getMillis();

// Proceed with a 'long' value in hand.
DateTime dateTimeUtc = new DateTime( millisecondsSinceEpoch, DateTimeZone.UTC );

DateTimeZone timeZone = DateTimeZone.forID( "Asia/Riyadh" );
DateTime dateTimeRiyadh = dateTimeUtc.withZone( timeZone );

// 'ar' = Arabic, 'SA' = Saudi Arabia.
java.util.Locale locale = new Locale( "ar", "SA" ); // ( language code, country code );
DateTimeFormatter formatter = DateTimeFormat.forStyle( "FF" ).withLocale( locale ).withZone( timeZone );
String output = formatter.print( dateTimeUtc );

转储到控制台...

System.out.println( "millisecondsSinceEpoch: " + millisecondsSinceEpoch );
System.out.println( "dateTimeUtc: " + dateTimeUtc );
System.out.println( "dateTimeRiyadh: " + dateTimeRiyadh );
System.out.println( "output: " + output );

跑步时......

millisecondsSinceEpoch: 1392583624765
dateTimeUtc: 2014-02-16T20:47:04.765Z
dateTimeRiyadh: 2014-02-16T23:47:04.765+03:00
output: 16 فبراير, 2014 AST 11:47:04 م

答案 1 :(得分:1)

保持代码不变,只需更改:
而不是

getDateInstance

尝试

getDateTimeInstance

或者,你最好使用:

SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
String datetime = fmt.format(cal.getTimeInMillis());

答案 2 :(得分:0)

使用此...

String dateFormat = "dd/MM/yyyy hh:mm:ss.SSS";

// Create a DateFormatter object for displaying date in specified format.
DateFormat formatter = new SimpleDateFormat(dateFormat);

// Create a calendar object that will convert the date and time value in milliseconds to date.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(milliSeconds);

String formatedDate =  formatter.format(calendar.getTime());

答案 3 :(得分:0)

试试这个

SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");// you can rearange it as you like

 cal.setTimeInMillis(timeInMilliseconds); //convert the time in milli to a date

 String date = format.format(cal.getTime());// here you get your time formated

答案 4 :(得分:0)

为什么你要使用日历对象????这只是浪费资源。

// Create a DateFormatter object for displaying date in specified format.
DateFormat myDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

String formatedDate =  myDateFormat.format(new Date(timeInMilliseconds));