0

现在是这样,我有一个long带有日期和时间的变量。所以我使用 DateFormat 来获取自己的日期和时间,现在我想获取自己的年、月、日、小时和分钟。日期和时间在 a 中String,所以实际上我可以用它来剪断字符串substring。但是因为例如瑞典的日期是这样的:“dd/mm/yyyy”,而美国的日期是这样的:“mm/dd/yyyy”。所以如果我只是剪掉瑞典日期的字符串,天变量将变成月份。

这是我的代码:

String start = mCursor.getLong(1);

Format df = DateFormat.getDateFormat(this);
Format tf = DateFormat.getTimeFormat(this);

String date = df.format(start);
String time = tf.format(start);

所以我的问题是,有没有办法在自己的字符串中为自己获取年、月、日、小时和分钟?

在此先感谢,GuiceU。(英语不好,我知道)

4

2 回答 2

7

我不会那样做的。使用java.util.Calendar

DateFormat dateFormatter = new SimpleDateFormat("yyyy-MMM-dd");
dateFormatter.setLenient(false);
String dateStr = "2012-Dec-21";
Date date = dateFormatter.parse(dateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int month = calendar.get(Calendar.MONTH);
于 2012-12-21T15:05:10.207 回答
1

看起来问题和接受的答案都忽略了时区,这可能是一个问题。

使用Joda-Time或 Java 8 中的新 java.time.* 包,这项工作要容易得多。你说你有long原始价值,所以让我们从那里开始,假设它代表 Unix 纪元(1970)的毫秒数。根本不需要处理创建或解析日期的字符串表示。Joda-Time 提供了许多访问年、月等数字和名称的点。Joda-Time 将名称本地化为瑞典语或英语。

日期样式代码是一对字符。第一个字符是日期样式,第二个字符是时间样式。指定字符“S”表示短样式,“M”表示中号,“L”表示长,“F”表示完整。通过指定样式字符“-”可以省略日期或时间。

long input = DateTime.now().getMillis();

DateTimeZone timeZone = DateTimeZone.forID( "Europe/Stockholm" );
DateTime dateTime = new DateTime( input, timeZone );
int year = dateTime.getYear();
int month = dateTime.getMonthOfYear(); // 1-based counting, 1 = January. Unlike crazy java.util.Date/Calendar.
int dayOfMonth = dateTime.getDayOfMonth();
int hourOfDay = dateTime.getHourOfDay();
int minuteOfHour = dateTime.getMinuteOfHour();

java.util.Locale localeSweden = new Locale( "sv", "SE" ); // ( language code, country code );
String monthName_Swedish = dateTime.monthOfYear().getAsText( localeSweden );
String monthName_UnitedStates = dateTime.monthOfYear().getAsText( java.util.Locale.US );

DateTimeFormatter formatter_Sweden = DateTimeFormat.forStyle( "LM" ).withLocale( localeSweden ).withZone( timeZone );
DateTimeFormatter formatter_UnitedStates_NewYork = DateTimeFormat.forStyle( "LM" ).withLocale( java.util.Locale.US ).withZone( DateTimeZone.forID( "America/New_York" ) );
String text_Swedish = formatter_Sweden.print( dateTime );
String text_UnitedStates_NewYork = formatter_UnitedStates_NewYork.print( dateTime );

DateTime dateTimeUtcGmt = dateTime.withZone( DateTimeZone.UTC );

转储到控制台...</p>

System.out.println( "dateTime: " + dateTime );
System.out.println( "monthName_Swedish: " + monthName_Swedish );
System.out.println( "monthName_UnitedStates: " + monthName_UnitedStates );
System.out.println( "text_Swedish: " + text_Swedish );
System.out.println( "text_UnitedStates_NewYork: " + text_UnitedStates_NewYork );
System.out.println( "dateTimeUtcGmt: " + dateTimeUtcGmt );

运行时……</p>

dateTime: 2014-02-16T07:12:19.301+01:00
monthName_Swedish: februari
monthName_UnitedStates: February
text_Swedish: den 16 februari 2014 07:12:19
text_UnitedStates_NewYork: February 16, 2014 1:12:19 AM
dateTimeUtcGmt: 2014-02-16T06:12:19.301Z
于 2014-02-16T06:10:07.047 回答