现在就是这样,我有一个long
变量,上面有日期和时间。所以我使用DateFormat来获取自己的日期和时间,现在我想获得自己的年,月,日,小时和分钟。日期和时间是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。 (英语不好,我知道)
答案 0 :(得分: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);
答案 1 :(得分:1)
看起来问题和接受的答案都忽略了时区,这可能是一个问题。
使用{8}中的Joda-Time或新的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 );
转储到控制台...
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 );
跑步时......
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