【问题标题】:Get day, year and month for itself获取自己的日、年和月
【发布时间】:2014-02-16 14:10:07
【问题描述】:

现在是这样,我有一个带有日期和时间的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。 (英语不好,我知道)

【问题讨论】:

  • 您可以使用jodatime,但请检查stackoverflow.com/questions/5059663/…
  • 在 Java 中,您可以使用 GregorianCalendarJodaTime。不过,我不知道它是否已被移植到 android。

标签: java android


【解决方案1】:

我不会那样做。使用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);

【讨论】:

  • 是的,它有效!但是由于我从光标中获取日期,并且必须首先使用 df.format(); 将其格式化为字符串;然后它返回一个像这样的字符串:“2012-12-21”,使用你的方法它需要是这样的:“2012-Dec-21”。但也许我可以以某种方式改变它?
  • 不,对不起!我的错!没有注意到 'DateFormat dateFormatter = new SimpleDateFormat("yyyy-MMM-dd");' 中的 'yyyy-MMM-dd'所以谢谢老兄!
  • 圣诞快乐。如果有帮助,请接受答案 - 对你有好处,对我有好处。
【解决方案2】:

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

使用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 );

转储到控制台...

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

【讨论】:

    猜你喜欢
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多