You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flex.apache.org by "Justin Mclean (JIRA)" <ji...@apache.org> on 2013/04/21 08:49:16 UTC
[jira] [Assigned] (FLEX-20017) DateFormatter MMM & MMMM return
month of by 1
[ https://issues.apache.org/jira/browse/FLEX-20017?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Justin Mclean reassigned FLEX-20017:
------------------------------------
Assignee: Justin Mclean
> DateFormatter MMM & MMMM return month of by 1
> ---------------------------------------------
>
> Key: FLEX-20017
> URL: https://issues.apache.org/jira/browse/FLEX-20017
> Project: Apache Flex
> Issue Type: Bug
> Components: Formatters
> Affects Versions: Adobe Flex SDK 3.2 (Release)
> Environment: Affected OS(s): All OS Platforms
> Affected OS(s): All OS Platforms
> Language Found: English
> Reporter: Adobe JIRA
> Assignee: Justin Mclean
> Labels: easyfix, easytest
>
> var df:DateFormatter = new DateFormatter();
> df.formatString = "DD MMM YY"
> trace(df.format(new Date(2000,1,1)))
> You get 01 Feb 00 when you should get 01 Jan 00
> The problem is in DateBase.extractTokenDate()
> It looks up DateBase.monthNamesShort|monthNamesLong[month] when month is 1 based, not zero based like the array.
> The case where (key < 3) realises this, and does month++
> I'm using the Eclipse Plugin on MacOS.
> This patch fixes it (use it in place of DateFormatter)
> package
> {
> import mx.formatters.DateFormatter;
> import mx.core.mx_internal;
> import mx.managers.ISystemManager;
> import mx.managers.SystemManager;
> import mx.formatters.DateBase;
> import mx.formatters.StringFormatter;
>
> public class DateFormatterPatched extends DateFormatter
> {
>
> private static const VALID_PATTERN_CHARS:String = "Y,M,D,A,E,H,J,K,L,N,S";
>
> public function DateFormatterPatched()
> {
> super();
> }
>
> mx_internal static function extractTokenDate(date:Date,
> tokenInfo:Object):String
> {
> //initialize();
> //var result:String = "";
>
> var key:int = int(tokenInfo.end) - int(tokenInfo.begin);
>
> //var day:int;
> //var hours:int;
>
> switch (tokenInfo.token) {
> case "M":
> {
> // month in year
> var month:int = int(date.getMonth());
> if (key < 3)
> {
> return DateBase.mx_internal::extractTokenDate(date,tokenInfo)
> }
> else if (key == 3)
> {
> return DateBase.monthNamesShort[month-1];
> }
> else
> {
> return DateBase.monthNamesLong[month-1];
> }
> }
> }
> return DateBase.mx_internal::extractTokenDate(date,tokenInfo)
> }
>
> override public function format(value:Object):String
> {
> // Reset any previous errors.
> if (error)
> error = null;
> // If value is null, or empty String just return ""
> // but treat it as an error for consistency.
> // Users will ignore it anyway.
> if (!value || value == "")
> {
> error = defaultInvalidValueError;
> return "";
> }
> // -- value --
> if (value is String)
> {
> value = DateFormatter.parseDateString(String(value));
> if (!value)
> {
> error = defaultInvalidValueError;
> return "";
> }
> }
> else if (!(value is Date))
> {
> error = defaultInvalidValueError;
> return "";
> }
> // -- format --
> var letter:String;
> var nTokens:int = 0;
> var tokens:String = "";
>
> var n:int = formatString.length;
> for (var i:int = 0; i < n; i++)
> {
> letter = formatString.charAt(i);
> if (VALID_PATTERN_CHARS.indexOf(letter) != -1 && letter != ",")
> {
> nTokens++;
> if (tokens.indexOf(letter) == -1)
> {
> tokens += letter;
> }
> else
> {
> if (letter != formatString.charAt(Math.max(i - 1, 0)))
> {
> error = defaultInvalidFormatError;
> return "";
> }
> }
> }
> }
> if (nTokens < 1)
> {
> error = defaultInvalidFormatError;
> return "";
> }
> var dataFormatter:StringFormatter = new StringFormatter(
> formatString, VALID_PATTERN_CHARS,
> DateFormatterPatched.mx_internal::extractTokenDate);
> //DateBase.mx_internal::extractTokenDate);
> return dataFormatter.formatValue(value);
> }
> }
> }
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira