2014-02-16 130 views
1

如何将毫秒转换为时间和日期字符串并按照用户的预期正确格式化?通过语言环境将日期和时间转换为日期和时间以及格式

我做了以下内容:

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

这似乎是工作,但我只得到使用这种方法的日期。

编辑:

要clearify,我需要从系统的时间/日期模式在某种程度上给每个用户自己的通用格式

现在,我和我的结合您的解决方案,它似乎喜欢我的工作期望。

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; 
} 

为什么地狱我会得到这个问题的提示???

+1

最好的解决方案,谢谢! –

回答

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 م 
+0

谢谢,看起来很有前途。当我在家时,我会尝试 –

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()); 
1

离开你的代码是,只是改变:
相反

getDateInstance 

尝试

getDateTimeInstance 

或者,你最好使用:

SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss"); 
String datetime = fmt.format(cal.getTimeInMillis()); 
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 
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)); 
相关问题